![]() データ同期プロトコル
专利摘要:
クライアント装置とサーバーとの間でデータを同期させる技術及びシステムを提供する。データを同期させることは、1つ以上のデータクラスの各々に対してクライアント装置とサーバーとの間で同期モードをネゴシエーションすることにより同期セッションを開始することを含む。ネゴシエーションの結果に基づいて状態コードが発生される。発生された状態コードに基づき、クライアント装置及びサーバーは、各データクラスに対してネゴシエーションされた同期モードを使用して1つ以上のデータクラスに対して更新されるべき1つ以上のデータアイテムを交換する。交換された1つ以上のデータアイテムは、クライアント装置又はサーバーにおいて更新される。その更新された1つ以上のデータアイテムは、クライアント又はサーバーにおいてコミットされる。a 公开号:JP2011514602A 申请号:JP2010549823 申请日:2009-03-03 公开日:2011-05-06 发明作者:カールステン グンサー;ブレンダン;エイ マッカーシー 申请人:アップル インコーポレイテッド; IPC主号:G06F12-00
专利说明:
[0001] 本発明は、データ同期のためのプロトコルに係る。] 背景技術 [0002] クライアントとサーバーとの間の同期は、オープンモバイルアライアンス−データ同期プロトコルOMA DC/SyncML(以前はSyncMLプロトコルとして知られている)のような同期プロトコルを使用して遂行することができる。OMS DA/SyncMLは、データクラスのシリアル同期を可能にし、データクラス当たり5つ以上のラウンドトリップを必要とする同期プロトコルである。] [0003] とりわけ、クライアント装置とサーバーとの間でデータを同期するための技術及びシステムを開示する。] [0004] 1つの態様において、データを同期することは、同期セッションを開始する要求を受け取ることを含む。この要求は、1つ以上のデータクラスの各々に対する提案された同期モードと、1つ以上のデータクラスへの1つ以上の変化とを含む。各データクラスに対する提案された同期モードが受け容れられるかどうか指示するための1つ以上の状態コードが発生される。発生された状態コードに基づき、各データクラスに対して受け容れられた同期モードを使用して、1つ以上のデータクラスへの1つ以上の変化に関連した1つ以上のデータアイテムを選択的に更新する。更新された1つ以上のデータアイテムは、サーバーにおいて選択的にコミットされる。] [0005] 実施形態は、次の特徴の1つ以上を任意に含むことができる。1つ以上の状態コードを発生することは、以前の同期セッションからセーブされた情報にアクセスして、1つ以上のデータアイテムを同期するのにその提案された同期モードを使用すべきかどうか決定することを含む。要求を受け取ることは、2つ以上のデータクラスに対する提案された同期モードをパラレルに受け取ることを含む。又、要求を受け取ることは、高速同期モード、低速同期モード又はリセット同期モードを含む提案された同期モードを受け取ることを含む。更に、要求を受け取ることは、更新されるべきデータアイテムの交換だけを可能にする高速同期モードを受け取ることを含む。同期セッションは、2つのメッセージを含む1つのラウンドトリップで完了する。同期セッションが中断すると、高速同期を再受け容れすることができる。提案された同期モード、及び1つ以上のデータクラスへの1つ以上の変化は、クライアント装置からの単一のメッセージで受け取ることができる。更新された1つ以上のデータアイテムは、その更新された1つ以上のデータアイテムをコミットするコマンドをクライアント装置が送信するときに、サーバーにおいて選択的にコミットされる。更に、提案された同期モードを拒絶し、又、受け取った要求に、異なる同期モードで応答することができる。] [0006] 別の態様において、コンピュータ読み取り可能な媒体上で実施されるコンピュータプログラム製品は、データ処理装置が種々のオペレーションを遂行するようにさせるよう動作できる。又、コンピュータプログラム製品は、データ処理装置が同期セッションを開始する要求を受け取るようにさせるよう動作できる。その要求は、1つ以上のデータクラスの各々に対する提案された同期モードと、1つ以上のデータクラスへの1つ以上の変化とを含む。コンピュータプログラム製品は、各データクラスに対する提案された同期モードが受け容れられるかどうかを表す状態コードをデータ処理装置が発生するようにさせるよう動作できる。コンピュータプログラム製品は、データ処理装置が、その発生された状態コードに基づき、各データクラスに対する受け容れられた同期モードを使用して、1つ以上のデータクラスへの1つ以上の変化に関連した1つ以上のデータアイテムを選択的に更新するようにさせるよう動作できる。更に、コンピュータプログラム製品は、データ処理装置が、その更新された1つ以上のデータアイテムをサーバーにおいて選択的にコミットするようにさせるよう構成される。] [0007] 実施形態は、次の特徴の1つ以上を任意に含むことができる。コンピュータプログラム製品は、データ処理装置が、以前の同期セッションからセーブされた情報に基づいて1つ以上の状態コードを発生するようにさせることができる。又、コンピュータプログラム製品は、データ処理装置が、2つ以上のデータクラスに対する提案された同期モードをパラレルに受け取るようにさせることができる。コンピュータプログラム製品は、データ処理装置が、高速同期モード、低速同期モード又はリセット同期モードを含む提案された同期モードを受け取るようにさせることができる。コンピュータプログラム製品は、データ処理装置が、更新されるべきデータアイテムの交換のみを可能にする高速同期モードを受け取るようにさせることができる。データアイテムの更新オペレーションは、(1)新たなアイテムを生成し(追加)、(2)既存のアイテムの特性を変更し(変更)、又は(3)既存のアイテムを削除する(削除)。又、コンピュータプログラム製品は、データ処理装置が、2つのメッセージを含む1つのラウンドトリップで同期セッションを完了するようにさせることができる。コンピュータプログラム製品は、データ処理装置が同期セッションの中断時に高速同期モードを再受け容れするようにさせることができる。コンピュータプログラム製品は、データ処理装置が、提案された同期モード及び1つ以上のデータクラスへの1つ以上の変化を単一のメッセージで受け取るようにさせることができる。コンピュータプログラム製品は、データ処理装置が、更新された1つ以上のデータアイテムをコミットするコマンドをクライアント装置が送信するときに、更新された1つ以上のデータアイテムをサーバーにおいて選択的にコミットするようにさせることができる。更に、コンピュータプログラム製品は、データ処理装置が、提案された同期モードを拒絶し、及び受け取った要求に異なる同期モードで応答するようにさせることができる。] [0008] 更に別の態様において、データを同期するためのサーバーは、1つ以上のクライアント装置への1つ以上の接続をオープンすることのできるトランスポートプロトコルを動作するように構成されたプロセッサを備えている。又、プロセッサは、そのオープンされた1つ以上の接続を経てサーバーと1つ以上のクライアント装置との間のデータ同期を可能にする同期プロトコルを動作するようにも構成される。この同期プロトコルは、サーバーが同期セッションを開始する要求を受け取れるようにする。この要求は、1つ以上のデータクラスの各々に対する提案された同期モードと、1つ以上のデータクラスへの1つ以上の変化とを含む。又、同期サーバーは、各データクラスに対する提案された同期モードが受け容れられるかどうか指示するための1つ以上の状態コードをサーバーが発生できるようにする。又、同期プロトコルは、サーバーが、その発生された状態コードに基づいて、各データベースに対する受け容れられた同期モードを使用して、1つ以上のデータクラスへの1つ以上の変化に関連した1つ以上のデータアイテムを選択的に更新きるようにする。更に、同期プロトコルは、更新された1つ以上のデータアイテムをサーバーにおいて選択的にコミットできるようにする。] [0009] 実施形態は、次の特徴の1つ以上を任意に含むことができる。プロセッサは、受け取られた1つ以上の変化に基づいて1つ以上のデータアイテムを更新するためにデータレポジトリーにアクセスするように構成される。プロセッサは、各データクラスに対する提案された同期モードを、以前の同期セッションからセーブされた情報に基づいて受け容れ又は拒絶するように同期プロトコルを動作するよう構成される。プロセッサは、2つ以上のデータクラスに対する提案された同期モードをパラレルに受け取るように同期プロトコルを動作するよう構成される。又、プロセッサは、高速同期モード、低速同期モード又はリセット同期モードを含む提案された同期モードを受け取るように同期プロトコルを動作するよう構成される。プロセッサは、更新されるべきデータアイテムだけを1つ以上のクライアント装置が送信できるようにする高速同期モードを含む提案された同期モードを受け取るように同期プロトコルを動作するよう構成される。プロセッサは、同期セッションが中断されたときに高速同期を再開する要求を受け取るように同期プロトコルを動作するよう構成される。プロセッサは、2つのメッセージを含む1つのラウンドトリップで同期セッションを完了するように同期プロトコルを動作するよう構成される。プロセッサは、提案された同期モード及び1つ以上のデータクラスへの1つ以上の変化を、1つ以上のクライアント装置のうちの少なくとも1つからの単一メッセージで受け取るように、同期プロトコルを動作するよう構成される。プロセッサは、1つ以上のクライアント装置のうちの1つが、更新された1つ以上のデータアイテムをコミットするコマンドを送信するときに、更新された1つ以上のデータアイテムをサーバーにおいて選択的にコミットするように、同期プロトコルを動作するよう構成される。更に、プロセッサは、提案された同期モードを拒絶し、及び異なる同期モードで要求に応答するように、同期プロトコルを動作するよう構成される。] [0010] 更に別の態様において、データを同期することは、同期セッションを開始するためにサーバーへ要求を送信することを含む。その要求は、1つ以上のデータクラスの各々に対する提案された同期モードと、1つ以上のデータクラスへの1つ以上の変化とを含む。各データクラスに対する提案された同期モードがサーバーにより受け容れられたかどうか指示するために1つ以上の同期コードが受け取られる。その受け取られた状態コードに基づいて、各データクラスに対する受け容れられた同期モードを使用して、1つ以上のデータクラスへの付加的な変化をサーバーから受け取る。更に、クライアント装置において、サーバーから受け取られた付加的な変化がコミットされる。] [0011] 実施形態は、次の特徴の1つ以上を任意に含むことができる。1つ以上の状態コードは、1つ以上のデータクラスのうちの少なくとも1つに対する提案された同期モードがサーバーにより拒絶されたかどうか指示することができる。拒絶された同期モードとは異なる同期モードを含む別の要求がサーバーへ送信される。又、提案された同期モード及び1つ以上の変化は、単一のメッセージにおいてサーバーへ送信される。2つ以上のデータクラスに対する提案された同期モードは、パラレルに送信される。更に、2つ以上のデータクラスの各々に対して異なる提案された同期モードがパラレルに送信される。例えば、1つのデータクラスに対して提案された高速同期モードを送信し、そして別のデータクラスに対して提案された低速同期モードを送信することができる。同期セッションが中断された後に、受け容れられた同期プロトコルを使用して同期セッションが再開される。] [0012] 更に別の態様において、コンピュータ読み取り可能な媒体上で実施されるコンピュータプログラム製品は、データ処理装置が1つ以上のオペレーションを遂行するようにさせるよう動作できる。又、コンピュータプログラム製品は、データ処理装置が同期セッションを開始する要求をサーバーへ送信するようにさせるよう動作できる。その要求は、1つ以上のデータクラスの各々に対する提案された同期モードと、1つ以上のデータクラスへの1つ以上の変化とを含む。コンピュータプログラム製品は、各データクラスに対する提案された同期モードがサーバーにより受け容れられるかどうかを表す1つ以上の状態コードをデータ処理装置が受け取るようにさせるよう動作できる。受け取った状態コードに基づいて、コンピュータプログラム製品は、受け容れられた同期モードを使用して、1つ以上のデータクラスへの付加的な変化をサーバーから受け取り、そしてサーバーから受け取ったその付加的な変化をクライアント装置においてコミットするように動作できる。] [0013] 実施形態は、次の特徴の1つ以上を任意に含むことができる。コンピュータプログラム製品は、データ処理装置が、1つ以上のデータクラスのうちの少なくとも1つに対する提案された同期モードがサーバーにより拒絶されたことを指示する1つ以上の状態コードを受け取ること及びその拒絶された同期モードとは異なる同期モードを含む別の要求を送信することを含むオペレーションを遂行するようにさせるよう動作できる。コンピュータプログラム製品は、データ処理装置が、提案された同期モード及び1つ以上の変化を単一のメッセージにおいてサーバーへ送信するようにさせるよう動作できる。コンピュータプログラム製品は、データ処理装置が、2つ以上のデータクラスに対する提案された同期モードをパラレルに送信するようにさせるよう動作できる。コンピュータプログラム製品は、データ処理装置が、2つ以上のデータクラスの各々に対する異なる提案された同期モードをパラレルに送信するようにさせるよう動作できる。コンピュータプログラム製品は、データ処理装置が、1つのデータクラスに対して提案された高速同期モードをそして別のデータクラスに対して提案された低速同期モードを送信させるよう動作できる。コンピュータプログラム製品は、データ処理装置が、同期セッションが中断された後に、受け容れられた同期プロトコルを使用して同期セッションを再開するようにさせるよう動作できる。] [0014] 更に別の態様において、クライアント装置は、サーバーへの1つ以上の接続をオープンすることのできるトランスポートプロトコル、及びそのオープンされた1つ以上の接続を経てクライアント装置とサーバーとの間のデータ同期を可能にする同期プロトコルを動作するように構成されたプロセッサを備えている。同期プロトコルは、クライアント装置が、同期セッションを開始する要求をサーバーへ送信できるようにする。その要求は、1つ以上のデータクラスの各々に対する提案された同期モードと、1つ以上のデータクラスへの1つ以上の変化とを含む。又、同期プロトコルは、クライアント装置が、各データクラスに対する提案された同期モードがサーバーによって受け容れられたかどうかを表す1つ以上の状態コードを受け取ることができるようにする。その受け取った状態コードに基づいて、同期プロトコルは、クライアント装置が、その受け容れられた同期モードを使用して、1つ以上のデータクラスへの付加的な変化をサーバーから受け取ることができるようにする。更に、同期プロトコルは、クライアント装置が、サーバーから受け取った付加的な変化をクライアント装置においてコミットできるようにする。] [0015] 実施形態は、次の特徴の1つ以上を任意に含むことができる。プロセッサは、1つ以上のデータクラスのうちの少なくとも1つに対する提案された同期モードがサーバーにより拒絶されたことを指示する1つ以上の状態コードを受け取り、そしてその拒絶された同期モードとは異なる同期モードを含む別の要求を送信するように、同期プロトコルを動作するよう構成される。プロセッサは、提案された同期モード及び1つ以上の変化を単一のメッセージにおいてサーバーへ送信するように同期プロトコルを動作するよう構成される。プロセッサは、2つ以上のデータクラスに対する提案された同期モードをパラレルに送信するように同期プロトコルを動作するよう構成される。プロセッサは、2つ以上のデータクラスの各々に対して異なる提案された同期モードをパラレルに送信することを含めて、2つ以上のデータクラスに対する提案された同期モードをパラレルに送信するように同期プロトコルを動作するよう構成される。プロセッサは、1つのデータクラスに対して提案された高速同期モードをそして別のデータクラスに対して提案された低速同期モードを送信するように同期プロトコルを動作するよう構成される。プロセッサは、同期セッションが中断された後に、受け容れられた同期プロトコルを使用して同期セッションを再開するように同期プロトコルを動作するよう構成される。] 発明の効果 [0016] 本発明による技術及びシステムは、潜在的に種々の効果を発揮するように実施することができる。ここに述べる同期プロトコルは、同期セッションを完了するためのラウンドトリップの数(交換される前後のメッセージの数)を減少することができる。ここに述べる同期プロトコルは、例えば、1つのラウンドトリップで同期セッションを完了することができる。ここに述べる同期プロトコルは、複数のデータクラスの各々に対する同期モードネゴシエーションをパラレルに行えるようにする。従って、複数のデータクラスに対する同期モードネゴシエーションの要求を1つのメッセージにおいて送信することができる。更に、ここに述べる同期プロトコルは、フィールドレベル区別及びレコードレベル区別を行えるようにする。] [0017] ここに述べる同期プロトコルは、SyncMLのような従来のプロトコルより簡単である。同期プロトコルに対して利用できるコマンドのセットは、簡単であり、しかも、拡張可能である。SyncMLとは異なり、ここに述べる同期プロトコルは、各メッセージをテキスト又はバイナリープロパティリストファイル(plist)として表す。更に、ここに述べる同期プロトコルは、効率的であり、且つ頑健である。例えば、精巧なアンカーロジックがサーバーに設けられる。更に、同期プロトコルは、信頼性のないネットワークに寛容である。ネットワーク接続が中断したときでも、アンカーロジックは、いったん接続されると、効率的な同期を確保する。更に、同期プロトコルは、比較的小さなメッセージサイズを維持することができる。] [0018] ここに述べる同期プロトコルは、リッチである。例えば、同期プロトコルは、クライアント装置とサーバーとの間で装置情報を交換することができる。又、同期プロトコルは、便利で、しかも、リッチなデータ表現を与える。] 図面の簡単な説明 [0019] クライアント装置とサーバーとの間でデータを同期できるようにするシステムを示すブロック図である。 サーバーの規範的コンポーネントを示す。 クライアント装置の規範的コンポーネントを示す。 メッセージのヘッダエレメントに対する規範的エレメントを示すテーブルである。 規範的プロパティリストファイル(plist)を示す。 コマンド要求エレメントに対する規範的エレメントを示すテーブルである。 コマンド応答エレメントに対する規範的エレメントを示すテーブルである。 ゲットコマンドに対する規範的パラメータをテーブルである。 ゲットコマンド応答に対するパラメータを例示するテーブルである。 プットコマンドに対する規範的パラメータを示すテーブルである。 プットコマンド応答に対する規範的パラメータを示すテーブルである。 削除コマンドに対する規範的パラメータを示すテーブルである。 削除コマンド応答に対する規範的パラメータを示すテーブルである。 同期スタートコマンドに対する規範的パラメータを示すテーブルである。 同期スタートコマンド応答に対する規範的パラメータを示すテーブルである。 同期変化コマンドに対する規範的パラメータを示すテーブルである。 同期変化コマンド応答に対する規範的パラメータを示すテーブルである。 同期コミットコマンドに対する規範的パラメータを示すテーブルである。 同期コミットコマンド応答に対する規範的パラメータを示すテーブルである。 同期キャンセルコマンドに対する規範的パラメータを示すテーブルである。 同期キャンセルコマンド応答に対する規範的パラメータを示すテーブルである。 規範的状態エレメントを示すテーブルである。 メッセージヘッダ、コマンド、及びコマンド応答に含ませるのに利用できる状態に対する規範的状態コードを示すテーブルである。 セッション又はメッセージの他のコマンドにおける、コマンドの所与の状態を受け取ることの作用を記述するテーブルである。 アンカーエレメントに対する規範的キーを示すテーブルである。 同期セッションの一例を示す。 クライアント装置とサーバーとの間の最適な高速又はリセット同期の一例を示す。 高速又はリセットデータ同期の別の例を示す。 idmapがセッション1からセッション2のスタート点へ延期された別の規範的データ同期セッションを示す。 低速同期の一例を示す。 複数のデータクラスをパラレルに同期させる一例を示す。 チェックポイントアンカーを使用する規範的同期セッションを示す。 規範的チェックポイントアンカーを示すテーブルである。 DeviceInfoエレメントに対する規範的キー値対を規定するテーブルである。 フィルター設定に対する規範的キー値対を示すテーブルである。 プロトコルシンタックスの拡張バッカス・ナウアフォーム(ABNF)記述である。 規範的同期セッションを示す。 リセット同期セッションに対する4つの規範的メッセージの概要を示す。 クライアント装置からサーバーへ送信される規範的メッセージを示す。 クライアント装置からサーバーへ送られる規範的メッセージを示す。 サーバーからクライアント装置へ送られる規範的メッセージを示す。 サーバーからクライアント装置へ送られる規範的メッセージを示す。 サーバーからクライアント装置へ送られる規範的メッセージを示す。 サーバーからクライアント装置へ送られる規範的メッセージを示す。 クライアント装置から送られる規範的メッセージを示す。 クライアント装置から送られる規範的メッセージを示す。 クライアント装置から送られる規範的メッセージを示す。 サーバーから送られる規範的メッセージを示す。 サーバーから送られる規範的メッセージを示す。 高速同期のための2つの規範的メッセージの概要を示す。 高速同期に対しクライアント装置から送られる規範的メッセージを示す。 高速同期に対しクライアント装置から送られる規範的メッセージを示す。 クライアント装置により送られたメッセージに応答してサーバーから送られる規範的メッセージを示す。 クライアント装置により送られたメッセージに応答してサーバーから送られる規範的メッセージを示す。 クライアント装置により送られたメッセージに応答してサーバーから送られる規範的メッセージを示す。 クライアント装置とサーバーを同期させるための規範的プロセスを示す。 クライアント装置とサーバーを同期させるための規範的プロセスを示す。] 実施例 [0020] 添付図面を通じて同じ要素は同じ参照記号及び呼称で示す。] [0021] クライアント装置とサーバーとの間でオーバー・ジ・エア(OTA)同期を可能にするための技術及びシステムを開示する。特に、ワイヤレス構造化データ同期プロトコルは、クライアント装置がサーバーとインターフェイスして種々のデータを同期できるようにする。このようなプロトコルは、例えば、iPhone(登録商標)のようなハンドヘルド装置とMac(登録商標)サーバーのようなサーバーとの間でMac(登録商標)オペレーティングシステムX(OS X)SyncServiceデータを同期させるのに使用できる。] [0022] ここに述べるOTA同期プロトコルは、例えば、トランスポートレイヤセキュリティ(TLS)を使用して認証及び/又は許可並びにメッセージセキュリティ/暗号化を遂行するための基礎的なネットワークトランスポートに依存している。同期プロトコルは、ハイパーテキスト転送プロトコル(HTTP)トランスポートプロトコル、又は装置とサーバーとの間で同期プロトコルメッセージを交換できる他の同様のトランスポートプロトコルを使用して、これらデータトランスポートを行えるようにする。] [0023] 同期プロトコルは、HTTPトランスポートのようなトランスポートを経てプロトコルメッセージの交換を行えるようにする。トランスポートを経て交換される各メッセージは、ヘッダエレメント及び本体エレメントを含む。本体エレメントは、一連のコマンド及び/又はコマンド応答エレメントを含むことができる。同期プロトコルは、適切な順序付け及びロス検出を保証するために各メッセージ、コマンド及びコマンド応答に独特のラベルを指定する。例えば、ラベルは、メッセージ、コマンド及びコマンド応答を順序付けるために一連の番号を含むことができる。ラベルを使用して、同期プロトコルは、トランスポート(例えば、HTTP)に代わって、たとえネットワークプロトコルがメッセージ順序付けを実施しなくても、適切な順序付け及びロス検出を保証する。] [0024] 同期プロトコルは、同期マークアップ言語(SyncML)のような従来のプロトコルより簡単である。同期プロトコルに利用可能なコマンドのセットは、簡単で、しかも、拡張性がある。例えば、リソースを操作するために3つの融通性のあるプリミティブなコマンドを利用できる。更に、データ同期のために4つの「同期」ファミリーコマンドを利用できる。更に、コマンドは、メッセージ境界を横切って分割されてもよい。SyncMLとは異なり、ここに述べる同期プロトコルは、各メッセージをテキスト又はバイナリープロパティリストファイル(plist)として表現する。Mac OS X Cocoa、NeXTSTEP、及びGNUstepプログラミングフレームワークでは、plistは、シリアル化オブジェクトを記憶するファイルである。plistは、Microsoft Windows(登録商標)のウインドウズレジストリーのファンクションと同様に、ユーザの設定を記憶するのにしばしば使用される。又、プロパティリストファイルは、バンドル及びアプリケーションに関する情報を記憶するのにも使用される。plistは、NSPropertyListSerializationクラスのような標準的なオペレーティングシステム(OS)特徴を使用して生成及びパーズするのが容易である。又、ここに述べる同期プロトコルは、簡単な同期ステートマシンを使用する。] [0025] ここに述べる同期プロトコルは、効率的で且つ頑強である。例えば、精巧なアンカーロジックがサーバーに設けられる。アンカーは、同期状態を追跡するのに使用されるタグ又はラベルである。又、同期プロトコルは、複数のデータクラスをパラレルに同期させることができる。同期プロトコルは、信頼性のないネットワークに寛容である。ネットワーク接続が中断されても、アンカーロジックは、最小のデータ再送信で再接続されると、効率的な同期を保証する。更に、同期プロトコルは、比較的小さなメッセージサイズを維持することができる。] [0026] ここに述べる同期プロトコルは、リッチである。例えば、同期プロトコルは、クライアント装置とサーバーとの間で装置情報を交換できるようにする。又、同期プロトコルは、便利で、しかも、リッチなデータ表現を与える。] [0027] 図1aは、クライアント装置とサーバーとの間のデータ同期を可能にするシステム100のブロック図である。システム100は、ネットワーク150を経て1つ以上のサーバー120とインターフェイスする1つ以上のクライアント装置110を備えている。クライアント装置100は、移動電話112、パーソナルデジタルアシスタント(PDA)114、ハンドヘルドデータ処理装置116、等の移動装置を含むことができる。移動電話112は、スマートホン及び一体型移動装置、例えば、iPhone(登録商標)を含む。ハンドヘルドデータ処理装置は、オーディオ再生装置、例えば、MP3プレーヤ及びiPod(登録商標)装置を含むことができる。] 図1a [0028] クライアント装置110は、セキュアなデータ接続を完成するためにHTTPトランスポートプロトコルのようなトランスポートプロトコルを使用してサーバー120とインターフェイスする。トランスポートプロトコルを通して、同期プロトコル140は、接続されたクライアント装置110とサーバーとの間のデータ同期を可能にする。同期されるデータは、連絡先(例えば、住所及び電話番号)、カレンダー、等の種々のデータクラスを含むことができる。データ同期は、種々のワイヤード及びワイヤレスネットワーク、例えば、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、イーサネット、インターネット、等を含むネットワーク150を経て行うことができる。] [0029] 図1bは、サーバー120の規範的コンポーネントを示す。サーバー120は、他のコンポーネントの中でも、プロセッサ160及びメモリ170を含むことができる。プロセッサ160は、コンピュータプログラムを実行できる中央処理ユニット(CPU)又は他のクラスのロジックマシンを含むことができる。メモリは、固定ハードドライブ又は取り外し可能な記憶装置のような不揮発性記憶装置を含むことができる。取り外し可能な記憶装置は、コンパクトフラッシュユニット、USBメモリスティック、等を含むことができる。又、メモリ170は、種々の形態のランダムアクセスメモリのような揮発性メモリを含むことができる。] 図1b [0030] プロセッサ160は、1つ以上のクライアント装置110へのトランスポート接続をオープンするようにトランスポートプロトコル130を動作することができる。プロセッサ160は、サーバー120とクライアント装置110との間のデータ同期を可能にするために、そのオープンされたトランスポート接続を経て同期プロトコル140を動作することができる。トランスポートプロトコル130及び同期プロトコル140は、プロセッサ160により実行又は動作されるべくメモリ170にロードされて実行される。例えば、図2−44bを参照して以下に述べるように、プロセッサ160は、同期セッションを開始するための要求をクライアント装置110から受け取るように同期プロトコル140を動作することができる。] 図2 [0031] 図1cは、クライアント装置110の規範的コンポーネントを示す。又、クライアント装置110は、他のコンポーネントの中でも、プロセッサ180及びメモリ190を含むことができる。プロセッサ180は、コンピュータプログラムを実行できる中央処理ユニット(CPU)又は他のクラスのロジックマシンを含むことができる。メモリは、固定ハードドライブ又は取り外し可能な記憶装置のような不揮発性記憶装置を含むことができる。取り外し可能な記憶装置は、コンパクトフラッシュユニット、USBメモリスティック、等を含むことができる。又、メモリ190は、種々の形態のランダムアクセスメモリのような揮発性メモリを含むこともできる。] 図1c [0032] プロセッサ180は、1つ以上のサーバー120へのトランスポート接続をオープンするようにトランスポートプロトコル130を動作することができる。プロセッサ180は、クライアント装置110とサーバー120との間のデータ同期を可能にするために、そのオープンされたトランスポート接続を経て同期プロトコル140を動作することができる。トランスポートプロトコル130及び同期プロトコル140は、プロセッサ160により実行又は動作されるべくメモリ190にロードされて実行される。例えば、図2−44bを参照して以下に述べるように、プロセッサ180は、同期セッションを開始するための要求をサーバー120へ送信するように同期プロトコル140を動作することができる。] 図2 [0033] 同期は、データストアが一貫したものであると分かった最後のとき以来各データストアに生じた変化を周期的に比較することにより2つの個別のデータストア間に一貫性を維持するプロセスである。データストアは、片側にクライアント装置110を、そして他側にサーバー120を含むことができる。互いに同期をとるために、データストアは、種々の能力を持つように構成される。例えば、各データストアは、必要なときに全てのデータを供給するように構成される。更に、各データストアは、最後の同期のとき以来の変化を識別し供給するように構成される。各データストアは、同期状態に保持されるべきスキーマに合意するように構成される。各データストアは、サポートされたデータ表現に合意するように構成される。各データストアは、同期プリミティブのセマンティック(即ち、追加、更新、削除)に合意するように構成される。更に、各データストアは、データストアの破損を回避するために同期中に問題が生じたときに以前の状態へロールバックするように構成される。] [0034] 同期されたデータは、関係モデル(E−R)に従い、構造化データ形式(エンティティ)の定義をグループ分けする「スキーマ」又は「データクラス」へと分割される。所与のデータクラス内のエンティティは、「関係」を経て互いに参照する。個別のデータクラスにおけるエンティティ間の関係は、禁止され、従って、各データクラスは、他のデータクラスと完全に独立している。ユーザの観点から、データクラスは、個別の専用のアプリケーションから管理されるように見える。例えば、「連絡先」データクラスは、アドレス帳アプリケーションにより主として管理することができ、一方、「カレンダー」データクラスは、カレンダーアプリケーションにより管理することができる。] [0035] 同期プロトコル140は、低速、リセット及び高速を含む種々の同期モードを可能にする。クライアント装置とサーバーが同期する最初のときに、データクラスの全てのデータが、同一と考えられる既存のデータアイテムに「一致」するように交換される。その後の同期オペレーションに対する同期及びネットワーク帯域巾使用を最適化するため、クライアント装置及びサーバーは、その対が同期した最後のとき以来変化したデータだけを交換すればよい。従って、各エンティティ(即ち、クライアント装置又はサーバー)は、どんなローカル変化を他のエンティティに送らねばならないか決定することができる。更に、各エンティティは、「高速」同期を再開できるまでにより多くのデータの交換を必要とする状況が生じたかどうか検出できねばならない。] [0036] 低速同期モードは、クライアント装置110とサーバー120が初めて同期するときにその後の相違のみのデータ交換に対する共通基線を確立するために要求される。低速同期中には、クライアント装置110がデータクラスの全てのデータをサーバー120に送信する。サーバーは、これらのデータアイテムを、サーバー120が既に知っているデータアイテムと一致させるよう試みる。適切な「アイデンティティ一致」が行われないと、複写データが生じることになる。次いで、サーバー120は、クライアント装置110におけるデータアイテム欠落で応答する。] [0037] リセット同期モードは、サーバーのデータでクライアント装置におけるデータクラスの全データをリセットするのに使用される。これは、データ構造体が装置110へプッシュされたとき、或いはサーバー120又は装置110が装置のローカルデータの崩壊を決定した場合に生じる。装置110は、データを送信せず、又、サーバーは、データクラスの完全なデータ構造体で応答する。] [0038] 高速同期モードは、特に、限定された帯域巾接続を使用するときに、最も効率的なモードである。クライアント装置110は、サーバー120との最後の同期以来変化したデータのみを送信する。サーバー120は、クライアント装置110の外部で変化したデータのみで応答する。] [0039] 同期セッションは、ネゴシエーション、プル、混合、プッシュ及びコミットを含む段階の個別セットに従うことができる。「プル」及び「プッシュ」という語は、サーバープロセスに対して定義することができる。クライアント装置100は、プル段階中にそのローカル変化をサーバー120へ送信し、又、サーバーのプッシュ段階中に更新を受け取る。] [0040] ネゴシエーション段階中に、両側(クライアント装置110及びサーバー120)で、以前の同期セッションからの情報を交換して、現在セッションに対してどんな同期モードを使用すると合意するか決定することができる。同期セッションを識別し編成する上で助けとなるように、各同期セッションには「同期アンカー」が指定される。クライアント装置110がサーバー120と以前に同期していた場合には、クライアント装置110は、おそらく、特定の同期モードを期待する。クライアント装置110は、サーバー120と高速同期できると考えるが、サーバー120は、装置をリセットすることを希望する。要求された同期モードが両側で受け容れられるときには、同期がプル段階へ進むことができる。] [0041] プル段階中に、クライアント装置110は、その変化したレコード(又は同期モードが「低速」である場合には、全てのレコード)をサーバー120へ送信する。無効変化は、サーバー120により拒絶される。] [0042] 全ての変化が受け取られると、サーバー120は、混合段階に入り、データベースにおける保留中の更新をクライアント装置110からの変化と合併させる。混合の結果、対立する変化のセットと、更新のセットとが得られ、これをクライアント装置110へプッシュしなければならない。サーバー120は、発見的アルゴリズムを使用して全ての対立を自動的に解消することができる。ある実施形態では、クライアント装置110が幾つかの対立を解消することが望まれる。同期プロトコル140は、対立を表現してサーバー120からクライアント装置110へ伝送することを許すように設計できる。同期プロトコル140は、対立をユーザによりクライアント装置上で解消して同期サーバー120へ伝送できるように設計できる。] [0043] プッシュ段階中に、サーバー120からの更新は、クライアント装置110へ伝送される。全ての更新がクライアント装置110により受け取られると、コミット段階に入る。両側(クライアント装置110及びサーバー120)で同期が成功したことに合意し、それらの現在同期アンカーを持続し、そして交換したデータをそれらの各データストアへコミットする。] [0044] 同期中の任意の点で、いずれかの側が同期を打ち消すよう判断し、変化をローカルデータストアへロールバックする。キャンセルは、次の事象の1つ以上に応答して明確に行われ、即ち、予想されない又は無効のデータが送信されたとき、同期ステートマシンにおける予想される遷移をたどらないとき、クライアント装置110とサーバー120との間の通信が中断したとき、又は他の何らかの問題が生じたときに行われる。] [0045] データの相違は、種々の粒度で同期させることができる。同期データを交換するときには、クライアント装置110及びサーバー120は、レコードレベル区別(RLD)のために各変化したレコードに対する完全なデータを送信する。或いは又、フィールドレベル区別(FLD)のために各変化したレコードの変化したフィールドのみを送信することもできる。特に、データレコードが多数のフィールドを含むか、又は連絡先データクラスの映像のような大量のデータを含むときには、FLDの方がRLDより好ましい。] [0046] サーバー120は、クライアント装置110から受け取ったデータのRLD及びFLDの両表示を動的にサポートすることができる。変化に対するデータ表示は、クライアント装置110が所与のデータクラスに対してRLDを使用するか又はFLDを使用するかを指示する。これは、FLDをサポートするためのメタ情報を維持する複雑さが合理的でないときに最大の融通性でクライアント装置のデータストアを実施できるようにする。] [0047] RLD変化を受け取ると、サーバー120は、その変化を、処理、記憶及び通信効率のためにFLDへ内部変換する。サーバー120は、RLDクライアント装置110が完全なレコードを送信することを期待する。クライアント装置110によりサポートされ且つクライアント装置のデータレコードから欠落したデータフィールドは、クライアント装置110によりクリア/削除されたと仮定する。しかしながら、あるデータフィールド例外値が、それら値を送信せずに不変であることを、クライアント装置110が指示できるようにするメカニズムを設けることができる。] [0048] 識別(ID)マッピングは、別の基本的同期概念である。同期された各データムは、ユニバーサルな独特のレコードID又はUUIDを有する。効率のために、サーバー120は、SyncServiceのUUIDをMac OS Xに使用することができる。或いは又、クライアント装置110のアプリケーションは、例えば、ローカルなデータストアの効率を促進するために、データに対するそのローカルな独特のID(LUID)を使用することができる。] [0049] サーバー120は、クライアント装置110のデータストアがそれら自身のLUIDを使用して、必要に応じてデータアイテムを参照できるようにする。このケースでは、サーバー120は、クライアント装置110がそれ自身のローカルIDを使用することによりグローバルレコードを透過的に参照できるようにするためLUID−UUIDマッピングを維持する。サーバー120は、データクラスに対して「低速」又は「リセット」同期モードが受け容れられたときに新たなマッピングを再確立する。] [0050] 同期プロトコル140は、HTTPのようなトランスポートプロトコル130を使用してサーバー120と装置110との間で交換される一連のメッセージを含む。同期プロトコル140は、トランスポートプロトコル130で交換されるメッセージを含む。同期プロトコルにおけるクライアント装置120及びサーバー130の役割は、通信/トランスポートプロトコルにおけるそれらの役割とは異なる。例えば、HTTPトランスポート130の場合に、装置110は、トランスポート130に対して常にクライアントであり、従って、装置110は、要求しか発しない。しかしながら、同期プロトコル140のメッセージプロトコルでは、クライアント装置110及びサーバー120の両方がメッセージコマンドを互いに発行する。] [0051] トランスポート トランスポートプロトコル130は、サーバー120とクライアント装置110との間のメッセージの交換を管理する。トランスポートプロトコル130は、HTTPトランスポート又は他の適当なトランスポート、例えば、拡張可能なメッセージング及びプレゼンスプロトコル(XMPP)を含むことができる。トランスポートプロトコル130のレイヤは、認証を取り扱い、従って、同期プロトコル140は、セキュリティ/認証処理を取り扱う必要がない。これは、同期プロトコル140がより効率的に機能できるようにし、少数のラウンドトリップしか必要としないようにする。例えば、トランスポートレイヤセキュリティ(TLS)は、送信されたデータのセキュリティを必要に応じて保証するのに使用される。又、トランスポートプロトコル130は、メッセージチャンキングを遂行することができる。トランスポートプロトコル130は、配信又はメッセージ順序付けを保証する必要がない。というのは、同期プロトコル140が、それを行ってメッセージロスを検出する必要な情報を有するからである。] [0052] HTTPは、リソースに対して遂行されるべきアクションを指示する8つのメソッド又は「バーブ(verbs)」を定義する。HTTPメソッドは、HEAD、GET、POST、PUT、DELETE、TRACE、OPTIONS、及びCONNECTを含む。HTTPをトランスポートプロトコル130として使用するときは、POSTメソッドを使用すべきである。POSTメソッドは、処理されるべきデータ、例えば、HTTP形態のデータを、識別されたリソースへ提出する。このデータは、要求の本体に含まれる。POSTメソッドの結果、新たなリソースの生成、既存のリソースの更新、又はその両方を生じさせる。] [0053] 例えば、サーバー120は、http://sync.mac.com/otaのようなURLにおいてOTA同期サービスを提供できる。テキストplist表示を使用するときには、「コンテンツ−タイプ」ヘッダが“text/xml”でなければならない。バイナリーplist表示を使用するときには、「コンテンツ−タイプ」ヘッダが存在しなければならず、そして「アプリケーション/オクテット−ストリーム」でなければならない。「コンテンツ−長さ」ヘッダは、メッセージのサイズを指示しなければならない。ユーザ−エージェントストリングは、クライアントプロトコル実施を識別するのに使用される。ユーザ−エージェントストリングは、「モバイル/1A543」という形式でなければならない。或いは又、デバイスインフォ(Deviceinfo)メソッドを使用して、デバイス実施バージョンを決定することもできる。] [0054] OTAプロトコル構造 セッションは、クライアント装置110とサーバー120との間で多数のプロトコルメッセージを交換することより成る。HTTPトランスポート実施形態は、クッキーを使用して、サーバー120とのセッションを維持することができる。メッセージヘッダにおいてフラグをセットすることによってセッションが完了することをクライアント装置110又はサーバー120のいずれかが指示する。各メッセージは、受信者により処理することのできる一連のコマンドを含む。クライアント装置110は、サーバー120への接続を開始する当事者として呼称される。] [0055] 同期プロトコル140を使用して交換されるメッセージは、UTF−8エンコードOSXプロパティリスト(即ち、ディクショナリー)として表される。この表示は、クライアント装置110及びサーバー120の両方における生成、シリアル化及びパージングを容易にする。同期プロトコル140は、拡張可能なマークアップ言語(XML)及びplistのバイナリー表示の両方をサポートすることができる。バイナリーplistは、XMLplistより60%から80%以上コンパクトにすることができる。XMLplist表示を使用するときには、送信されるバイナリーデータは、ベース64エンコード型NSDataオブジェクトとしてシリアル化され、テキストデータは、RFC3076に基づいてXMLエスケープされる。各プロトコルメッセージは、2つのルートエレメント、即ちヘッダ及び本体より成る。] [0056] 図2は、規範的ヘッダエレメント210を示すテーブルである。メッセージヘッダエレメント210は、service(サービス)、deviceid、version(バージョン)、userid、sequence(シーケンス)、msisdn、final(最終)、result(結果)、等を含むことができる。各ヘッダエレメント210に対応して、ヘッダエレメントのタイプ220も示されている。又、図2は、各ヘッダエレメント210が必要かどうかも示す(230)。更に、図2には、各ヘッダエレメントの短い記述240も示されている。] 図2 [0057] ヘッダエレメント210は、メッセージを送信するエンティティ(例えば、クライアント装置110又はサーバー120)を識別し、そしてあるセッションコントロール情報を含むことができる。ヘッダエレメント210は、メッセージの必要なエレメントであり、ヘッダエレメントの値は、ディクショナリーである。ヘッダのエレメント210は、例えば、ソースエンティティ(deviceid)及びターゲットサービス(service)、ターゲットアカウント(userid)、及びメッセージシーケンスナンバー(sequence)を指示することができる。又、“version”エレメントは、同期プロトコルバージョンが使用されることを指示できる。例えば、図2は、記述240の欄に、現在バージョンが“1.0”であることを示している。これらのエレメント210は、全て、メッセージに存在しなければならない。] 図2 [0058] 又、図2は、ヘッダエレメント210のservice、deviceid、version、userid、sequence、及びmsisdnの値がストリングとしてセットされることも示している。例えば、sequenceエレメントの値は、所与のセッションに対して“1”でスタートする単純に増加する整数値である。sequenceエレメントは、セッションに対するメッセージ順序を指示するのに使用される。] 図2 [0059] serviceエレメントの値は、同期サーバーのようなターゲットサービスの名前を識別するストリングである。useridエレメントの値は、メッセージに対するターゲットアカウントを指示するストリングである。useridエレメントは、トランスポートレイヤ130においてサーバー120で認証されるプリンシパルを識別することができる。クライアント装置110のdeviceidは、装置のハードウェアを独特に識別するストリングである。iPhone(登録商標)及びiPod(登録商標)タッチ装置の場合に、deviceidエレメントは、集積回路カード(ICCID)値である。又、GSM無線を伴うクライアント装置110は、現在インストールされた/アクティブなセキュリティインフォメーションマネージメント(SIM)カードの電話番号を指示するためにmsisdnエレメントを送信する。msisdn値は、例えば、ユーザがSIMカードを交換するとき、同期の振舞いに影響せずに、あるセッションから次のセッションへ変化する。] [0060] finalエレメントは、送信者(例えば、クライアント装置110)が、完了されるべきセッションの側を考慮するときにヘッダに存在する。finalエレメントは、値が「真」のブーリアンである。finalエレメントフラグが存在するときには、セッションが完了であると考えられる。送信者は、次いで、セッション関連リソースを解放し、そして受信者は、別のメッセージを送信することが要求されない。受信者は、未処理のコマンド応答を返送するために別のメッセージを送信する。しかしながら、受信者は、更に別のコマンド要求を送信してはならない。userid及びserviceエレメントの値は、所与のセッションの全てのメッセージに対して一定でなければならない。deviceidエレメントの値は、送信エンティティに対して一定に保たれねばならない。換言すれば、サーバー120及びクライアント装置110は、異なる値を有してもよいが、これらの値は、変化しない。] [0061] resultエレメントは、メッセージの全体的な状態を指示するためにメッセージのヘッダに存在する。プロトコルの簡潔さのため、ヘッダ状態をもたないメッセージに対してS_OK状態が示唆される。メッセージが受け容れられなかったことが検出されると、ヘッダにはresultエレメントが存在する。データが不格好になるか、又は受信者がセッションの致命的状態に遭遇するときは、メッセージが受け容れられない。非OK状態値は、先行するメッセージ本体が処理されず、メッセージコマンドがいずれも遂行されず、又、セッションを終了しなければならないことを指示する。例えば、E_BadRequest(703)のヘッダ状態値は、以前のメッセージが不格好なものであったことを指示する。E_LimitExceeded(611)のヘッダ状態値は、以前のメッセージサイズが受信者の能力を越えることを指示する。又、E_ServiceBusy(700)、E_ServiceUnavailable(701)、及びE_RetryLater(704)のヘッダ状態値は、サーバー120が、要求を処理する上で困難に遭遇していることを指示する。] [0062] 図3は、規範的なplist300を示す。規範的なplist300は、ヘッダ310及び本体320を含む。ヘッダ310は、種々の規範的ヘッダエレメント312、314、316、318及び319を含む。例えば、“f1234567a0745a890a86b5556d9e020202bRX8”のストリング値を有する規範的deviceidエレメント312が示されている。又、“14155338207”のストリング値を有する規範的msisdnエレメントも示されている。加えて、“1”の値を有する規範的sequenceエレメントも示されている。又、plist300は、syncのストリング値をもつ規範的serviceエレメントも含む。更に、plist300は、“1.0”のストリング値をもつ規範的versionエレメントも含む。] 図3 [0063] メッセージの本体は、受信者によって処理されるべきコマンド要求及び/又はコマンド応答のアレイを含む。本体エレメントは、メッセージの必要なエレメントであり、本体の値は、コマンド又はコマンド応答ディクショナリーのアレイとして表される。本体エレメントは、送信者が送信すべきコマンドを有していないときに空である。本体のコマンドは、コマンドシーケンス順序で処理される。] [0064] 装置110及びサーバー120は、両方とも、コマンド要求及び応答を同じメッセージ内で送信する。これは、現在セッションの状態に依存する。] [0065] 同期プロトコルにおけるコマンドは、次の2つの一般的カテゴリーに入る。即ち(1)メッセージ又はセッションにおいて送信者、受信者及び他のコマンドの処理の状態に影響を及ぼすコマンド、並びに(2)そうでないコマンド。所与のステートレス(stateless)コマンドが首尾良く実行されるかどうかは、メッセージにおける他のコマンドに暗示的に影響しない。ステートフル(stateful)コマンドは、「コマンドファミリー」プレフィックス(例えば、全てのデータ同期コマンドに対して“sync−”)で始まる。又、コマンドファミリープレフィックスは、サーバー120が異なるクライアント装置110に対してサービスの任意のセットをサポートできるようにする有用なコマンドnamespaceメカニズムも与える。所与のメッセージでは、所与の「コマンドファミリー」におけるコマンドは、シリーズで処理され、いずれかのコマンドが不成功状態を返送する場合は、そのファミリーにおけるその後のコマンドが全く処理されない。例えば、この場合には、コマンドが処理されなかったことを示す状態コード(例えば、E_CommandNotProcessed)をもつコマンド応答を返送することができる。] [0066] 非最終的メッセージの受信者は、各コマンドに対する1つ以上のコマンド応答をセッションの次のメッセージに含ませる。最終的メッセージの受信者は、最終的メッセージがトランスポートレイヤ要求において送信された(即ち、トランスポート応答が予想される)ときに各コマンドに対して1つ以上のコマンド応答を含ませる。最終的メッセージの受信者は、最終的メッセージがトランスポートレイヤ応答において送信されたときに各コマンドに対して1つ以上のコマンド応答を含ませる。] [0067] 「ゲット(get)」「プット(put)」及び「デリート(delete)」の3つのステートレスプリミティブコマンドを定義することができる。これらのステートレスコマンドは、同期プロトコル140内で任意のオブジェクト交換又は表現的状態転送(RESTful)セマンティックを実施するのに使用される。これは、サーバー120がデータ同期オペレーションを遂行することを要求せずに、例えば、マネージメントアクションを遂行し、装置設定又は能力を転送し、或いは大きなバイナリーオブジェクト又は他のメタデータを参照するのに使用できる。] [0068] 所与のコマンド又はコマンド応答に対するデータが先天的に大き過ぎることが検出されると、送信者は、それを複数の断片に分割して、連続メッセージで送信することができる。所与のコマンドは、メモリの制約、トランスポートの制約、等を含む種々の理由及び/又は制約で分割される。] [0069] 図4は、コマンド要求に含まれる規範的コマンドエレメントを示すテーブルである。各コマンド要求又はコマンド応答がディクショナリーによって表現される。コマンド要求に対して、種々のコマンドエレメント410を設けることができる。規範的コマンドエレメントは、“name(名前)”エレメント、“sequence(シーケンス)”エレメント、及び“params”エレメントを含む。これらのコマンドエレメント410は、全てのコマンドに対して存在しなければならない。“name”及び“sequence”エレメントに対する値420は、ストリングである。“params”エレメントに対する値は、ディクショナリーでなければならない。ディクショナリーは、キー/値対のマップである。特定のコマンドにもよるが、キーは、ストリングであり、値は、他のタイプである。更に、各コマンドエレメントに対して、テーブルの第2の列に値タイプ420が示されている。第3の列430は、コマンドエレメントが要求されるかどうか指示する。更に、最後の列には、各コマンドエレメントの短い記述440が示されている。] 図4 [0070] メッセージと同様に、コマンドは、セッションごとに単調に増加するsequenceエレメントに整数値を指定することができる。例えば、整数値は、“1”でスタートし、セッションごとに単調に増加することができる。sequenceエレメントの検出された値に基づいて、受信者は、シーケンス順序でコマンドを処理する。] [0071] nameエレメントは、コマンドの名前を指示する必要なエレメントである。nameエレメントの値は、ストリングである。] [0072] コマンド要求は、paramsエレメントを使用して、コマンドに対するパラメータを受信者へ送る。paramsエレメントは、ディクショナリーを含む値を有する必要なエレメントである。特定のパラメータエレメント及び値は、図4に示すように、特定のコマンドに基づいて変化する。] 図4 [0073] moreエレメントは、コマンドが断片へと分割されることを送信者が指示する必要があるときにコマンドに存在することが要求される。各断片は、オリジナルコマンドの“sequence”値を再使用する。moreエレメントの値は、それが存在するときは、ブール値「真」である。] [0074] 図5は、規範的コマンド応答エレメントを示すテーブルである。コマンド応答エレメントは、“name(名前)”、“sequence(シーケンス)”、“params”、“more(より多く)”、“result(結果)”及び“response(応答)”を含む。各コマンド応答エレメントに対して、値タイプ520が設けられる。name及びsequenceエレメントの値は、例えば、ストリングである。paramsエレメントの値は、ディクショナリーである。more及びresponseエレメントの値は、ブール値「真」であり、resultエレメントの値は、アレイである。] 図5 [0075] テーブルの第3列530は、コマンド応答エレメントが必要かどうか示している。更に、コマンド応答ごとに、テーブルの第4列には短い記述540が存在する。例えば、nameエレメントは、「ゲット(get)」のようなコマンドの名前を記述する。又、コマンド要求に対応するコマンド応答のためのsequenceエレメントは、同じシーケンス値を親コマンド要求としてもたねばならない。コマンドと同様に、paramsエレメントは、コマンド応答に対するパラメータを受信者へ送るためにコマンド応答によって使用される。paramsエレメントは、ディクショナリーを含む値を有する必要なエレメントである。特定のパラメータエレメント及び値は、図5に示すように、特定のコマンド応答に基づいて変化する。更に、コマンド応答は、それに関連したコマンド要求と同じパラメータ値を使用する。] 図5 [0076] responseエレメントは、メッセージ本体アイテムがコマンド応答であることを指示する。responseエレメントが存在しないことは、本体がコマンド要求であることを指示する。又、responseエレメントの値は、値「真」をもつブーリアンである。] [0077] コマンド応答は、整数値が指定されたsequenceエレメントを使用する。上述したように、sequenceエレメントに指定される値は、受信者により以前に送信されたコマンドシーケンスに対応する。受信者は、コマンド応答をシーケンス値に基づきシーケンス順に処理する。通常、送信者は、所与のメッセージで受け取られたコマンド当たり厳密に1つのコマンド応答を送信する。しかしながら、コマンド応答の状態がS_NotCompleted(コマンドの処理がまだ完了していないことを指示する)である場合には、送信者は、コマンドに対する別のコマンド応答をその後のメッセージにおいて送信することができる。或いは又、コマンドが種々の断片へと分割された場合には、コマンド断片当たり1つのコマンド応答が送信される。] [0078] resultエレメントは、コマンド応答に含まれる必要なエレメントである。resultエレメントの値は、コマンド要求の結果を指示する1つ以上の状態アイテムのアレイである。コマンドを適時に、例えば、クライアントのトランスポート要求が時間切れする前に、完了できない場合には、受信者は、コマンドが完了されないことを指示するためにS_NotCompleted(602)のような状態を返送する。この状態は、コマンドの成功又は失敗を指示するものではなく、コマンドの送信者に、セッションにおいて結果が後で得られることを通知する。最終的な状態を受け取る前にセッションが終了するときに、E_Failed状態のような失敗状態を仮定する。未知のコマンド要求は、E_UnknownCommand(608)のような未知の状態値を生じさせる。又、ステートフルコマンドに対する予想しないコマンドは、E_StateError(610)のような状態エラー値を生じる。] [0079] 受信者が、ステートフルコマンドを処理する間にエラーに遭遇したときは、メッセージの同じコマンドファミリーに対するその後のステートフルコマンドが全く処理されないことがある。この場合には、コマンドが処理されないことを指示するためにそれらのコマンドに対してE_CommandNotProcessed(609)のような状態が返送される。その状態に基づいて、送信者は、それらのコマンドを再試みする。] [0080] コマンドの定義 図6、7、8、9、10、11、12、13、14、15、16、17、18及び19は、コマンド及びコマンド定義を例示するテーブルである。同期プロトコル140は、同期セッション中に送信するのに使用できるコマンドを定義する。コマンドのこのリストは、包括的リストではない。同期プロトコルを拡大及び拡張して他のサービスを提供するように付加的なコマンドを追加することができる。] 図6 [0081] プリミティブコマンド 図6、7、8、9、10及び11にリストされたコマンドは、受信者における任意のリソースを変更することのできるステートレスコマンドである。使用可能なステートレスコマンドは、「ゲット(get)」「プット(put)」及び「デリート(delete)」を含む。これらのステートレスコマンドは、同期プロトコル140内におけるオブジェクト交換又はRESTfulセマンティックを実施することができる。各コマンドは、“uri”、“value”、“item−type”、“items”、“idmap”、“userid”、“authtype”、“auth”、“version”、“anchors”等を含むことができる。これらパラメータの幾つかが必要とされ、他のものは任意である。] 図6 [0082] 例えば、“uri”パラメータは、ストリング値が指定された必要なパラメータである。“uri”パラメータは、アクセスすべき希望のリソースを指定することができる。同期プロトコル140は、“uri”パラメータがクライアント装置110の実際のリソースを表すかサーバー120の実際のリソースを表すか、例えば、ファイルシステム経路を表すかバーチャルリソースを表すか、指定しない。“value”パラメータのタイプは、クライアント装置110及びサーバー120により決定される。更に、“value”パラメータのタイプは、同期プロトコル140によって指定されない。“value”パラメータの論理的タイプは、“item−type”パラメータを使用して明確に指定することができる。それでも、“value”パラメータの表現は、有効プロパティリストタイプでなければならない。] [0083] 受信者は、指示されたURIへのアクセスを制限する目的で、メッセージの“userid”を許可されたプリンシパルとして使用することができる。セッション許可が不充分である場合には、“userid”、“authtype”及び“auth”エレメントがコマンドに任意に含まれてもよい。] [0084] 図6は、getコマンドと、“uri”、“userid”、“authtype”及び“auth”を含むその関連パラメータ610とを示すテーブルである。これらパラメータの各々にストリング値620が指定される。又、テーブルは、どのパラメータが要求されるかも示す(630)。uriパラメータは要求される(チェックマークで指示された)が、残りのパラメータは、getコマンドと共に任意に含まれる。又、パラメータの記述640も設けられる。uriパラメータの値は、検索すべきデータオブジェクトのURIを記述する。任意のuseridパラメータの値は、メッセージのuseridを任意にオーバーライドすべきかどうか記述する。任意のauthtypeパラメータの値は、任意の認証タイプを記述することができる。任意のauthストリングvalueの値は、任意の認証クレデンシャルを記述することができる。] 図6 [0085] 図7は、getコマンド応答に対する規範的パラメータ710を示すテーブルである。規範的パラメータは、“uri”、“value”及び“item−type”を含む。それに関連するパラメータ値720は、これらパラメータに対するストリングである。第4列730は、uri及びvalueパラメータが要求されるが、item−typeは任意であることを示す。パラメータの記述740も示されている。getコマンドと同様に、getコマンド応答のuriパラメータは、getコマンドにより要求されるデータオブジェクトのURIを記述する。valueパラメータは、URIの値を記述する。例えば、getコマンドは、送信者が希望のデータオブジェクト又は値を受信者から要求することができるようにする。それに応答して、受信者は、getコマンド応答をgetコマンドの送信者へ送信する。getコマンド応答は、getコマンドにより指示されたURIに対する結果値を返送するためのvalueパラメータを含む。更に、getコマンド応答に対する任意のitem−typeパラメータは、値のタイプを記述する。] 図7 [0086] 図8は、putコマンドの規範的パラメータを示すテーブルである。putコマンドは、送信者が任意のデータオブジェクトを受信者へ転送できるようにする。規範的パラメータ810は、“uri”、“value”、“item−type”、“userid”、“authtype”及び“auth”を含む。このテーブルは、これらパラメータ810の各々にストリングパラメータタイプ820が指定されることを示す。又、このテーブルは、パラメータが要求されるかどうかも示す(830)。例えば、uri及びvalueパラメータは要求されるが、restは任意である。最後の列は、各パラメータ810の記述840を示す。uriパラメータの値は、交換すべきデータオブジェクトのURIを表す。valueパラメータは、受信者へプットされるべき値を指定する。item−typeパラメータは、値の論理的タイプを記述する。任意のuseridパラメータの値は、メッセージのuseridを任意にオーバーライドすべきかどうか記述する。任意のauthtypeパラメータの値は、任意の認証タイプを記述することができる。任意にauthストリングvalueの値は、任意の認証クレデンシャルを記述することができる。] 図8 [0087] 図9は、putコマンド応答に対する規範的パラメータ910を示すテーブルである。putコマンドに応答して、受信者は、uriパラメータを含むputコマンド応答を送信する。uriパラメータは、第4列930にチェックマークで示されたように必要なパラメータである。パラメータタイプ920は、uriパラメータに対するストリングである。putコマンドと同様に、uriパラメータは、putコマンドに応答して置き換えられたデータオブジェクトのURIを記述する(940)。] 図9 [0088] 図10は、deleteコマンドに対する規範的パラメータを示すテーブルである。deleteコマンドは、“uri”、“userid”、“authtype”及び“auth”のような種々のパラメータ1010を含む。パラメータタイプ1020は、これらパラメータに対するストリングである。uriパラメータは、第4列1030にチェックマークで示されたように必要である。残りのパラメータは、任意である。パラメータ1010の記述1040は、get及びputコマンドについて述べたものと同様である。deleteコマンドは、送信者が指定のURIの除去を要求できるようにする。] 図10 [0089] 図11は、deleteコマンド応答に対する規範的パラメータ1110を示すテーブルである。deleteコマンド応答は、uriパラメータを含む。このテーブルは、uriパラメータタイプ1120がストリングであることを示す。uriパラメータは必要であり(1130)、従って、deleteコマンド応答に含まれる。又、このテーブルは、パラメータの記述1140も含む。例えば、ストリングタイプuriパラメータは、deleteコマンドに応答して削除されるオブジェクトのURIを記述する。] 図11 [0090] 図12、13、14、15、16、17、18及び19にリストされたコマンドは、ステートフルコマンドである。同期プロトコル70は、ステートフルな同期ファミリーコマンド及びコマンド応答も与える。ステートフルコマンドは、sync−start(同期スタート)、sync−chenge(同期変更)、cync−commit(同期コミット)及びcync−cancel(同期キャンセル)を含む。これらのステートフルコマンドは、プロトコルクライアント装置110とサーバー120との間の構造化データ同期を可能にする。ステートフルコマンド及びコマンド応答の各々は、所与のコマンドにより影響を受けるデータクラスステートマシンを識別するための“uri”パラメータを含む。] 図12 [0091] 図12は、sync−startコマンドに対する規範的なパラメータ1210を示すテーブルである。sync−startコマンドは、受信者とで所与のデータクラスに対する同期ステートマシンを生成できるようにする。規範的パラメータ1210は、“uri”及び“anchors”を含む。パラメータタイプ1220は、uriパラメータに対するストリングである。又、パラメータタイプ1220は、anchorsパラメータに対するディクショナリーである。“uri”及び“anchors”パラメータは、第3列1230にチェックマークで示されたように必要なパラメータである。] 図12 [0092] 又、テーブルは、各パラメータに対する記述1240も含む。例えば、uriパラメータは、連絡先のためのストリング“com.apple.Contacts”又はカレンダーのための“com.apple.Calendars”のようなデータクラス名を指示する。受信者がデータクラスをサポートしないと検出されたときには、状態E_NotSupported(612)が返送される。データクラスがイネーブルされないと検出されたときには、状態E_NotAllowed(604)が返送される。これら両方の場合には、状態“param−name”が存在しければならず、且つuriパラメータが状態返送の原因であったことを指示するために値“uri”をもたねばならない。anchorsパラメータは、同期ネゴシエーション段階中に使用される情報を含む。情報は、要求された同期モード(“mode”);データストアバージョン(“device_version”、“server_version”);及び同期アンカー(“last_device_anchor”、“next_device_anchor”、“last_server_anchor”、“next_server_anchor”)を含むことができる。アンカーエレメントに対する“device_version”パラメータは、クライアント装置110のバージョンを記述する。アンカーエレメントに対する“server_version”パラメータは、サーバープロセス120のバージョンを記述する。anchorsパラメータは、装置、サーバー、フィルター及びリセットアンカーを含む。アンカーは、同期モードを要求するのに使用できる。デフォールト同期モードは、高速同期モードである。アンカーは、同期方向を指定するのに使用できる。デフォールト同期方向は、変更がクライアント装置110からサーバープロセス120へ並びにサーバープロセス120からクライアント装置110へ送信されることを指示する“twoway”である。] [0093] 図13は、sync−startコマンド応答に対する規範的パラメータを示すテーブルである。sync−startコマンド応答に対する規範的なパラメータ1310は、“uri”及び“anchors”パラメータを含むことができる。uri及びanchorsパラメータタイプ1320は、各々、ストリング及びディクショナリーである。又、テーブルは、これらパラメータが必要なパラメータであるかどうかも示している(1330)。テーブルには、パラメータの記述1340も示されている。uriパラメータは、連絡先、カレンダー、等のデータクラス名を記述する。anchorsパラメータは、クライアント装置110、サーバー120、フィルター及びリセットに対して与えることができる。加えて、anchorsパラメータは、高速、低速及びリセットのような必要な同期モードを指示するのに使用できる。デフォールト同期モードは、高速である。] 図13 [0094] 受信者は、提出された情報を使用して同期しようとするときには、OK状態 S_OK(600)をsync−startコマンド応答と共に返送する。受信者は、(例えば、クライアントが要求したものとは異なる同期モードを使用して)調整されたパラメータと同期しようとするときには、E_NegotiationFailed(613)のようなネゴシエーション失敗状態を返送する。受信者は、送信者の供給バージョン(例えば、“device_version”)をサポートしないとき、バージョンがサポートされないことを指示するE_VersionNotSupported(612)状態のような状態を返送する。受信者は、希望の同期方向(例えば、“direction”)をサポートしないとき、希望の同期方向がサポートされないことを指示するE_NotSupported(614)のような状態を返送する。これら全ての場合に、状態は、コマンドの“anchors”パラメータのエレメントが不成功状態の原因であることを示す値“anchors”と共に“param−name”パラメータを含む。更に、受信者は、コマンド応答の“params”ディクショナリーに希望の同期モード及びアンカーを指示することができる。] [0095] クライアント装置110は、複数のデータクラスをパラレルに同期させたいときに、図28に示すように、データクラスごとに個別の“sync−start”コマンド要求を送信する。これらのコマンドは、サーバー120が同じ同期ジョブ内のコマンドを処理できるように同じメッセージに含まれる。サーバー120がクライアント装置110から受け取った“sync−start”コマンドを受け容れると、クライアント装置110は、“sync−changes”コマンドを開始する。既に同期とりをスタートしたセッション中に“sync−start”コマンドを送信することで、E_StateError(610)状態のようなステートエラー状態が生じる。] 図28 [0096] 単一のセッションにおいて複数のデータクラスを同期させるときには、データクラスごとのコマンドが個別のステートマシンにおいて動作する。通常、サーバー120は、全てのデータクラスがプル段階を完了するか、又は変化したデータを混合する前にキャンセルするまで、待機となる。] [0097] 図14は、sync−changesコマンドに対する規範的パラメータを示すテーブルである。パラメータ1410は、“uri”、“itemtype”、“items”、“anchors”及び“idmap”を含むことができる。uri及びitemtypeパラメータに対するパラメータタイプ1420は、ストリングである。anchors、items及びidmapパラメータに対するパラメータタイプは、ディクショナリーである。テーブルは、第4列1430において、uri、itemtype及びitemsパラメータが必要とされるが、idmap及びanchorsは任意であることを示している。又、テーブルは、これらパラメータの記述1440も含む。uriパラメータは、要求された変化についてデータクラスを記述する。itemtypeパラメータは、sync−changesコマンドで識別されたアイテム又はデータのタイプを記述する。itemsパラメータは、itemtypeに依存するformat/typeのようなアイテムのディクショナリーを記述する。itemsパラメータに対する関連キーは、装置recordidである。idmapパラメータは、GUID−LUID対のディクショナリーを記述する。それに関連するキーは、サーバーrecordidであり、その値は、装置recordidである。anchorsパラメータは、“checkpoint anchor”として含まれる。受信者は、そのアンカーを、その存在時に、供給された値で更新する。セッションが中断されると、受信者は、その後の同期セッションをチェックポイントアンカーでスタートし、低速同期モードに入ることなく通常に同期し続ける。] 図14 [0098] sync−changesコマンドは、クライアント装置110がサーバー120へ変化を送信できるようにする。或いは又、サーバー120は、クライアント装置110へ更新を送信することができる。uriパラメータは、更新又は変化されるべきデータアイテムのデータクラスを指示する。送信されるデータアイテムのタイプは、itemtypeパラメータにより指示される。itemtypeパラメータは、itemパラメータが全レコード(“records”)を表すか又はフィールドレベル変化(“changes”)を表すか指示することができる。クライアント装置110がidmapを要求することが検出されると、itemsパラメータの装置LUIDによってデータアイテムがキーされる。itemsパラメータに対するディクショナリーのフォーマットは、item−typeに依存する。itemsパラメータの値は、均質なitem−typeである。itemsパラメータは、それ以上のアイテムを送信する必要がないことを指示するための空きアレイである。例えば、空きアレイは、変化がないこと、又はレコードがないことを指示できる。] [0099] 装置変化がないか又は同期モードが「リセット」されたことが検出されると、クライアント装置110は、“sync−changes”コマンドを、“items”パラメータに対する空きアレイと共に送信する。データクラスに対する全ての適切なデータアイテムがコマンドパラメータに含まれない場合には、“more”ブーリアンフラグエレメントも含まれる。“more”ブーリアンフラグエレメントは、多量の同期データを小さな塊へと分割するのに使用できる。これは、交換されるべきデータのサイズが受信者の容量より大きいときに有用である。例えば、受信者は、メッセージサイズに限度がある。或いは又、“more”ブーリアンフラグエレメントは、所与のデータクラスに対する複数のitem−typeを単一のセッションで交換できるようにする。サーバー120がクライアント装置110からの全データクラスに対して最後の“sync−changes”塊を受け取ると、サーバー120は、供給された全てのデータを中央データベースと同期させる。次いで、プロトコルセッション内のクライアントとサーバーとの役割が逆転される。] [0100] この点において、クライアント装置110は、サーバー120からのコマンドの処理を開始する。又、クライアント装置110は、サーバー120へコマンド応答を返送することができる。サーバーからの同期データ更新は、次いで、“sync−changes”コマンドにおいて送信される。更新が必要とされない場合には、サーバー120は、“items”パラメータに対する空きアレイと共に“sync−changes”を送信する。サーバー120からの“sync−changes”コマンド要求を処理する間に、クライアント装置110は、これらのコマンドに応答し、そして“idmap”パラメータを使用してコマンド応答の“params”に追加トランザクションのための必要なマッピング情報を含ませる。“idmap”パラメータは、クライアント装置からの“sync−changes”コマンドにおいて送信されて、既存のマッピングを送信する。例えば、idmapは、サーバー120がデータエンティティを変化させるのとは独立して更新される。セッション中に“sync−start”の前に或いは“sync−commit”又は“sync−cancel”の後に“sync−changes”を送信すると、例えば、E_StateError(610)状態のようなエラー状態が生じる。装置100は、“sync−changes”コマンド応答の送信を省略し、そしてその後の同期セッションの“sync−changes”コマンドまで“idmap”パラメータの送信を延期させる。これは、同期セッションを完了するのに必要なトランスポートラウンドトリップの数を減少するために行われる。] [0101] 図15は、sync−changesコマンド応答に対する規範的パラメータを示すテーブルである。パラメータ1510は、“uri”、“anchors”及び“idmap”を含む。テーブルは、これらパラメータに対するパラメータタイプ1520を含む。uriパラメータは、ストリングタイプであり、anchors及びidmapパラメータは、ディクショナリーである。又、テーブルは、パラメータが必要であるかどうかの指示も含む(1530)。uriは、必要であるが、anchors及びidmapパラメータは、任意である。又、テーブルは、これらパラメータの記述1540も含む。uriパラメータは、必要な変化に対するデータクラスを指示する。anchorsパラメータは、最後の同期セッションが停止された特定のポイントを指示するのに使用されるチェックポイントアンカーである。idmapパラメータは、サーバーのrecordidを含むキーを伴うGUID−LUID対のディクショナリーである。キーの値は、装置recordidを含むことができる。] 図15 [0102] 図16は、sync−commitコマンドに対する規範的パラメータを示すテーブルである。sync−commitコマンドに対するパラメータ1610は、“uri”及び“anchors”を含む。sync−commitコマンドは、同期オペレーションをコミットするのに使用される。このコマンドは、送信者が既にコミットされておりそして受信者もコミットすべきであることを受信者に知らせることを指示する。このテーブルは、パラメータが必要であるかどうか示す(1630)。例えば、“uri”パラメータは、必要であるが、anchorsパラメータは任意である。] 図16 [0103] 又、このテーブルは、パラメータに対するパラメータタイプ1620も示す。uriパラメータは、ストリングタイプであり、そしてanchorsパラメータは、ディクショナリーである。又、このテーブルは、パラメータの記述1640も示す。uriパラメータは、sync−changesをコミットするためのデータクラスを指示する。anchorsパラメータは、サーバー120が記憶すべき“next_device_anchor”を送信するためにクライアント装置110により使用される。それに応答して、サーバー120は、“next_server_anchor”をsync−commitコマンドにおいて送信する。更に、次の同期に使用すべき同期モードが指示され、sync−commitコマンドにおいて返送される。セッション中に最終的な“sync−changes”の前に或いは“sync−commit”又は“sync−cancel”の後に“sync−commit”コマンドを送信することで、E_StateError(601)エラー状態のようなエラー状態が生じる。] [0104] 図17は、sync−commitコマンド応答に対する規範的パラメータを示すテーブルである。パラメータ1710は、“uri”パラメータを含む。uriパラメータに対するパラメータタイプ1720は、ストリングである。テーブルの第4列1730に示されたように、uriパラメータは、sync−commitコマンド応答に含まれる必要なパラメータである。uriパラメータの記述1740は、uriパラメータが同期セッション中にコミットされるデータクラスを指示することを示している。装置110は、同期セッションを完了するのに必要なトランスポートラウンドトリップの数を減少するために“sync−commit”コマンド応答の送信を省略する。“sync−commit”コマンドにおいて受信された同期アンカーを次のセッションの“sync−start”コマンドにおけるanchorsパラメータとして提出することにより、サーバー120は、手前の“sync−commit”が受信されたと推論する。] 図17 [0105] 図18は、sync−cancelコマンドに対する規範的パラメータを示すテーブルである。sync−cancelコマンドは、同期オペレーションをキャンセルするのに使用される。sync−cancelコマンドは、送信者が既にキャンセルされていて、受信者もキャンセルすべきであることを受信者に知らせることを指示する。受信者は、データクラスに対してそれが行った変化を、最後に受け取った同期アンカーにより表された状態へロールバックしなければならない。このテーブルは、sync−cancelコマンドに対するパラメータ1810が“uri”パラメータ及びanchorsパラメータを含むことを示す。uriパラメータに対するパラメータタイプ1820は、ストリングであり、そしてanchorsパラメータは、ディクショナリーである。又、このテーブルは、第4列1830に、そのパラメータが必要であるかどうかも示す。uriパラメータは、必要であるが、anchorsパラメータは、任意である。又、このテーブルは、パラメータの記述1840も示す。uriパラメータは、同期をキャンセルするためのデータクラスを指示する。anchorsパラメータは、次の同期セッションに対して使用すべきアンカー及び/又は同期モードを指定するのに使用される。セッション中に“sync−start”の前に或いは“sync−commit”又は“sync−cancel”の後に“sync−cancel”コマンドを送信することで、E_StateError(610)エラー状態のようなエラー状態が生じる。装置110は、同期セッションを完了するのに必要なトランスポートラウンドトリップの数を減少するために“sync−cancel”コマンド応答の送信を省略する。“sync−cancel”コマンドにおいて受信された同期アンカーを、次のセッションの“sync−start”コマンドにおけるanchorsパラメータとして提出することにより、サーバー120は、手前の“sync−cancel”が受け取られたことを推論することができる。] 図18 [0106] 図19は、sync−cancelコマンド応答に対する規範的パラメータを示すテーブルである。このコマンド応答に使用可能なパラメータ1910は、“uri”パラメータである。uriパラメータのパラメータタイプ1920は、ストリングである。このテーブルは、第4列1930に、パラメータが必要であるかどうかも指示する。uriパラメータは、チェックマークで指示されたようにコマンド応答に含ませることが要求される。このテーブルは、uriパラメータの記述1940も含む。uriパラメータは、同期をキャンセルするためのデータクラスを指示する。] 図19 [0107] 状態 図20は、規範的状態エレメントを示すテーブルである。この規範的状態エレメントは、第1列2010に示され、それに対応する値が第2列2020に示されている。テーブルの第3列2030は、その状態エレメントが必要であるかどうか示している。又、テーブルの最後の列2040は、各状態エレメントの短い記述を示す。] 図20 [0108] 所与のコマンド又はメッセージの処理から生じる状態は、“status(状態)”エレメントにより表される。メッセーズヘッダには、単一の状態エレメントが現れる。メッセージが処理されなかったときには、それに対応する状態エレメントがメッセージヘッダに含まれる。コマンド応答の“results”パラメータには、“status”エレメントのアレイが含まれる。] [0109] 状態エレメントは、コマンド要求の結果を指示する。状態アイテムは、ディクショナリーである。ディクショナリーは、“status”エレメントを含むと共に、それに対応するコマンド要求の結果状態を指示するために“code”エレメントを含む。“status”エレメントの値は、ストリングである。“code”エレメントの値は、整数ストリング又は整数を含む。“description(記述)”エレメントは、コマンドに存在してもよい任意のエレメントである。“description”エレメントの値は、ストリングである。“description”エレメントは、純粋な情報であり、コマンドの処理に何ら影響しない。] [0110] “param−name”、“param−key”及び“param−index”エレメントが存在してもよい。それらは、あるコマンドに対する多状態応答を与えるのに使用される。“param−name”値は、ストリングでなければならず、コマンド要求のどのパラメータにこの状態アイテムが対応しているか指示する。“param−index”値は、ストリング又は整数でなければならない。これは、“param−name”エレメントが存在し且つコマンド要求におけるその値がアレイであった場合に存在しなければならない。“param−index”の値は、この状態アイテムに対応するコマンド要求における“param−name”アイテムのインデックスを指示する。インデックス値は、ゼロベースである。“param−key”値は、ストリングでなければならない。これは、“param−name”エレメントが存在し且つコマンド要求におけるその値がディクショナリーであった場合に存在しなければならない。“param−key”の値は、この状態アイテムに対応するコマンド要求における“param−name”アイテムのキーの値を指示する。] [0111] 又、“param−name”、“param−key”及び“param−index”エレメントが存在してもよい。それらは、必要なエレメントではなく、あるコマンドに対する多状態応答を与えるのに使用できる。“param−name”状態エレメントの値は、コマンド要求のどのパラメータにこの状態エレメントが対応しているか指示するストリングである。“param−index”エレメントの値は、ストリング又は整数のいずれかである。“param−name”状態エレメントが存在し、そしてコマンド要求における“param−name”状態エレメントの値に一致するパラメータの値がアレイであったときに状態ディクショナリーに“param−index”状態エレメントが含まれる。“param−index”状態エレメントの値は、その状態エレメントに対応するコマンド要求における“param−name”状態エレメントの値に名前が対応するところのパラメータのアレイパラメータアイテムのインデックスを指示する。インデックス状態エレメントの値は、ゼロベースである。“param−key”エレメントの値は、コマンド要求におけるどのパラメータにこの状態エレメントが対応するか指示するストリングである。“param−key”状態エレメントの値は、ストリングである。“param−key”状態エレメントは、“param−name”状態エレメントが存在し、且つコマンド要求における“param−name”状態エレメントの値に一致するパラメータの値がディクショナリーであったときに状態ディクショナリーに含まれる。“param−index”状態エレメントの値は、この状態エレメントに対応するコマンド要求における“param−name”状態エレメントの値に名前が対応するところのパラメータのディクショナリーパラメータアイテムのキーを指示する。] [0112] 状態におけるインデックスは、オリジナルparamがアレイであった場合に状態に生じるparamのインデックスを参照する。インデックスは、ゼロベースからカウントしてスタートする。このゼロベースメカニズムは、状態の希薄なアレイを返送できるようにする。例えば、アレイであるパラメータ“items”を有する以下に示すコマンド(“examplecommand”と称する)について考える。このコマンドにおける2つ以外の全てのアイテムは良好に形成され、第2及び第5アイテムが(“不良”)値を有すると仮定する。] [0113] 上述した“examplecommand”に対するコマンド応答は、次のように表される。] [0114] これは、指示されたもの以外の全部が成功であるようにしてコマンドに対して返送されるべき状態が複数あることを示している。しかしながら、(0から続けて、ひいては、コマンドリストの第2アイテムから続けて)インデックス1においてparam“items”に対して供給される値は、不良値である(状態コード607)。第5アイテム(インデックス4)についても同じことが言える。このメカニズムは、成功である1つおきのアイテムに対して状態の非報告を可能にする。このメカニズムは、多数のアイテムがサーバーへ送信されて若干が失敗となるだけであるときに帯域巾使用要件を著しく減少することができる。] [0115] 単一のコマンド応答で複数の状態を返送する必要があるときは、S_MultiStatus(601)のような状態を状態アレイの第1エレメントとして含ませることにより状態の希薄なアレイが表現される。その後の状態エレメントは、パラメータインデックス値と、パラメータタイプがアレイであったところの失敗したパラメータエレメントに対する個別の状態とを指示する。或いは又、その後の状態エレメントは、パラメータキー値と、パラメータタイプがディクショナリーであったところの失敗したパラメータエレメントに対する個別の状態とを指示する。] [0116] 一般的な状態に対して、状態コードレンジ600−699のようなあるレンジにおける状態コードを予約することができる。又、サーバーにより返送されそして現在セッションの終了を一般的に招くエラーに対して、レンジ700−799のような別のレンジにおける状態コードを予約することができる。] [0117] 図21は、コマンド及びコマンド応答に含ませるのに使用可能な状態に対する規範的な状態コードを示すテーブルである。第1列2110は、使用可能な状態を記述する。それに関連した状態コードが第2列2120に示されている。第3列2130は、各状態に対する記述を示す。最後の列2140は、各状態に対する親エレメント又はパラメータを示す。] 図21 [0118] このテーブルは、成功状態及びエラー状態を記述する。図21に示した例では、“S_OK”状態には、成功を指示するコード600が指定される。親エレメントは、メッセージヘッダ又はコマンド応答である。他の成功状態は、多値状態での成功を指示するためにコード601に指定された“S_MultiStatus”状態である。親エレメントは、コマンド応答である。] 図21 [0119] エラー状態は、コマンドに対するコマンド処理がまだ完了しないことを指示するためにコード602に指定された“E_NotCompleted”状態を含む。親エレメントは、コマンド応答である。指示されたデータオブジェクト又はURIが見つからないことを指示するために“E_NotFound”エラー状態がコード603に指定される。親エレメントは、コマンド応答である。例えば、アクセス権が不充分であることからオペレーションが許されないことを指示するために“E_NotAllowed”エラー状態がコード604に指定される。親エレメントは、コマンド応答である。コマンドが必要なパラメータを見失ったことを指示するために“E_MissingParam”エラー状態がコード605に指定される。供給されたパラメータが誤ったものであることを指示するために“E_ParamError”エラー状態がコード606に指定される。親パラメータは、コマンド応答である。不良値が供給されたことを指示するために“E_BadValue”エラー状態がコード607に指定される。親パラメータは、メッセージヘッダ又はコマンド応答である。未知のコマンドが発行されて無視されたことを指示するために“E_UnknownCommand”がコード608に指定される。親エレメントは、コマンド応答である。手前のコマンド処理のエラーでコマンドが処理されなかったことを指示するために“E_CommandNotProcessed”エラー状態がコード609に指定される。親エレメントは、コマンド応答である。“E_StateError”は、コマンドファミリーの現在ステートマシンに基づき予想されないコマンドが受け取られたことを指示するためにコード610に指定されたエラー状態である。親エレメントは、コマンド応答である。非常に多くのアイテムが供給されたことを指示するために“E_LimitExceeded”エラー状態がコード611に指定される。親エレメントは、コマンド応答である。プロトコル又はコマンドバージョンがサポートされないことを指示するために“E_VersionNotSupported”エラー状態がコード612に指定される。親エレメントは、メッセージヘッダ又はコマンド応答である。同期モードネゴシエーションが失敗したことを指示するために“E_NegotiationFailed”エラー状態がコード613に指定される。親エレメントは、コマンド応答である。非サポート又は非実行オペレーションが試みられたことを指示するために“E_NotSupported”エラー状態がコード614に指定される。親エレメントは、メッセージヘッダ又はコマンド応答である。一般的な失敗を指示するために“E_Failed”エラー状態がコード615に指定される。親エレメントは、メッセージヘッダ又はコマンド応答である。現在ステートマシンがキャンセルされたことを指示するために“E_Canceled”エラー状態がコード616に指定される。親エレメントは、コマンド応答である。サーバー120が非常にビジーであり、メッセージを処理できないことを指示するために、“E_ServiceBusy”エラー状態がコード700に指定される。この状態コードは、装置110がコマンドを直ちに再試みすべきであることも指示する。親コードは、メッセージヘッダである。サーバー120が使用できず、メッセージを処理できないことを指示するために、“E_ServiceUnavailable”エラー状態がコード701に指定される。この状態コードは、装置110が直ちに再試みすべきであることも指示する。親エレメントは、メッセージヘッダである。サーバー120に内部エラーがあることを指示するために“E_ServiceError”エラー状態がコード702に指定される。親エレメントは、メッセージヘッダ又はコマンド応答である。サーバー120がメッセージを理解できないことを指示するために“E_BadRequest”エラー状態がコード703に指定される。親エレメントは、メッセージヘッダである。クライアント装置110が後で再試みすることをサーバー120が要求することを指示するために“E_RetryLater”エラー状態がコード704に指定される。親エレメントは、メッセージヘッダである。] [0120] 図22は、コマンドに対して所与の状態を受け取ることの作用を示すテーブルである。指示子“C”は、状態を受け取るコマンドのみについての失敗を指示する。指示子“F”は、コマンドファミリーのステートマシンの終了を指示する。“sync”コマンドに対するステートマシンの終了は、例えば、“sync−cancel”が間もなく来るという指示である。指示子“M”は、メッセージが処理されなかったことを指示する。指示子“S”は、セッションが終了することを指示する。] 図22 [0121] “E_NotFound”エラー状態を受け取る作用は、get、put及びdeleteコマンドの失敗である。sync−start、sync−changes、sync−cancel及びsync−commitコマンドについては、データクラスステートマシンが終了される。“E_NotAllowed”エラー状態を受け取る作用は、get、put及びdeleteコマンドの失敗である。sync−start、sync−changes、sync−cancel及びsync−commitコマンドについては、データクラスステートマシンが終了される。“E_MissingParam”エラー状態を受け取る作用は、get、put及びdeleteコマンドの失敗である。sync−start、sync−changes、sync−cancel及びsync−commitコマンドについては、データクラスステートマシンが終了される。更に、メッセージは、処理されない。“E_ParamError”エラー状態を受け取る作用は、get、put及びdeleteコマンドの失敗である。sync−start、sync−changes、sync−cancel及びsync−commitコマンドについては、データクラスステートマシンが終了される。“E_BadValue”エラー状態を受け取る作用は、get、put及びdeleteコマンドの失敗である。sync−start、sync−changes、sync−cancel及びsync−commitコマンドについては、データクラスステートマシンが終了される。更に、メッセージは、処理されない。“E_UnknownCommand”を受け取る作用は、get、put及びdeleteコマンドの失敗である。sync−start、sync−changes、sync−cancel及びsync−commitコマンドについては、データクラスステートマシンが終了される。“E_CommandNotProcessed”エラー状態を受け取る作用は、get、put、delete、sync−start、sync−changes、sync−cancel及びsync−commitコマンドの失敗である。“E_StateError”エラー状態を受け取る作用は、sync−start、sync−changes、sync−cancel及びsync−commitコマンドについて、データクラスステートマシンが終了されることである。“E_LimitExceeded”エラー状態を受け取る作用は、get、put及びdeleteコマンドの失敗である。sync−start、sync−changes、sync−cancel及びsync−commitコマンドについては、データクラスステートマシンが終了される。更に、メッセージは、処理されない。“E_VersionNotSupported”エラー状態を受け取る作用は、get、put及びdeleteコマンドの失敗である。sync−start、sync−changes、sync−cancel及びsync−commitコマンドについては、データクラスステートマシンが終了される。更に、セッションが終了となる。“E_NegotiationFailed”エラー状態を受け取る作用は、sync−startコマンドの失敗である。“E_NotSupported”エラー状態を受け取る作用は、get、put及びdeleteコマンドの失敗である。sync−start、sync−changes、sync−cancel及びsync−commitコマンドについては、データクラスステートマシンが終了される。“E_Failed”エラー状態を受け取る作用は、get、put及びdeleteコマンドの失敗である。sync−start、sync−changes、sync−cancel及びsync−commitコマンドについては、データクラスステートマシンが終了される。更に、セッションが終了となる。“E_Canceled”エラー状態を受け取る作用は、sync−start、sync−changes、sync−cancel及びsync−commitコマンドについてデータクラスステートマシンが終了されることである。“E_ServiceBusy”エラー状態を受け取る作用は、セッションが終了となることである。“E_ServiceUnavailable”エラー状態を受け取る作用は、セッションが終了となることである。“E_ServiceError”エラー状態を受け取る作用は、全てのコマンドについてセッションが終了となることである。“E_BadRequest”エラー状態を受け取る作用は、セッションが終了となることである。“E_RetryLater”エラー状態を受け取る作用は、セッションが終了となることである。] [0122] アンカー 同期モード、同期方向、エージェントバージョン、及び同期アンカーのような同期状態情報が種々の時間に装置とサーバーとの間で交換される。図12−20に示されたコマンド及びコマンド応答に含まれる“anchors(アンカー)”エレメントは、この情報を束ねるのに使用される。“anchors”エレメントは、ディクショナリーとして実施される。] 図12 [0123] 図23は、アンカーエレメントに対する規範的なキーを示すテーブルである。このテーブルは、同期アンカーキー2310、関連キータイプ2320、及びキーの記述2330を例示する列を含む。“mode(モード)”キーは、望ましい又はネゴシエーションされた同期モードを表す。modeキーは、anchorエレメントに存在するのも任意である。modeキーの値は、それが存在するときに、ストリングとして実施され、そしてストリング値は、同期モードを表すために「低速」、「高速」又は「リセット」を含む。modeキーの値が存在しないときは、メッセージの受信者は、値が「高速」であると推測する。従って、送信者により指示されるmodeキーの値が存在しないと、受信者は、高速同期モードを仮定する。] 図23 [0124] “direction(方向)”キーは、望ましい又はネゴシエーションされた同期方向を表す。directionキーの値は、anchorsエレメントに任意に存在することができる。directionキーの値は、それが存在するときに、ストリングとして実施され、ストリングの値は、“to_server”、“to_device”又は“twoway”を含むことができる。従って、これらの値は、同期方向を、装置110からサーバー120へ同期をとるものとして、又はサーバー120から装置110へ同期をとるものとして、或いはその両方として指示する。directionキーの値が存在しないときは、受信者は、値を“twoway”として推測する。] [0125] “device_version”キーは、装置110により送信され、装置データソースエージェントバージョンを表す。device_versionキーの値は、それが存在するときに、ストリングとして実施される。この情報は、装置ソフトウェアの所与のバージョンに特有の振舞い又は能力を推測するためにサーバー120により使用することができる。サーバー120は、例えば、所与の装置エージェントバージョンでは同期が許されないことを決定できる。] [0126] “server_version”キーは、サーバー120により送信され、サーバーのデータソースエージェントバージョンを表す。server_versionキーの値は、それが存在するときに、ストリングとして実施される。この情報は、サーバーソフトウェアの所与のバージョンに特有の振舞い又は能力を推測するために装置110によって使用することができる。装置110は、例えば、所与のサーバーエージェントバージョンでは同期が許されないことを決定できる。] [0127] 実際のアンカーは、キー“last_device_anchor”、“next_device_anchor”、“last_server_anchor”及び“next_server_anchor”を使用して交換される。これら各キーの値は、“anchors”ディクショナリーに存在することができる。これら各キーの値は、それが存在するときに、ストリングとして実施される。存在しないときには、受信者がキーに対する最後に知られた値を推測する。] [0128] anchorsエレメントに対するキーの値は、不透明と考えられ、エンティティは、別のエンティティのanchorキーをデコードし又はそこから意味を推測するよう試みてはならない。例えば、クライアント装置は、“next_server_anchor”又は“last_server_anchor”に関して仮定をしてはならない。] [0129] 同期プロトコル特徴 クライアント装置110が相違(即ち、変化、削除又は新データ)をサーバー120へ送信するときに、クライアント装置110は、“sync−changes”コマンドの“item−type”パラメータを経て「レコードレベル差(RLD)」が使用されるか「フィールドレベル差(FLD)」が使用されるか指示する。“item−type”パラメータの値「変化」は、FLDを指示するが、値「レコード」は、RLDを指示する。RLDをサポートする装置は、特定のデータクラスに対する所与の変化したレコードのための全データセットを送信する。これと対照的に、FLDをサポートする装置は、データクラスに対するデータセットにおける変化したレコードの変化したプロパティしか送信しない。] [0130] RLDの場合に、所与のプロパティが変化せず且つ削除もされないことを指示する“+**no−−change**+”のような特殊な値をクライアント装置110が送信できるようにする最適化がサポートされる。これは、変化しない連絡先映像のような大きなデータアイテムの送信を回避する上で助けとなる。] [0131] idmap データクラスに対する、例えば、クライアント装置110のデータストアが、idmapの使用を希望することを検出すると、サーバー120からの“sync−changes”コマンドに対してコマンド又はコマンド応答に“idmap”パラメータを含ませることができる。“idmap”パラメータの値は、サーバーのユニバーサルな独特の識別子(UUID)をクライアント装置110のローカルな独特の識別(LUID)へとマップするディクショナリーである。その後、サーバー120は、クライアント装置110のLUIDを使用してそのマップされたエンティティを参照する。] [0132] 最適化 分割されたセッションは、ワイヤレス通信に対してメッセージ/パケットロスを生じさせる。同期プロトコル140は、「高速」同期から抜け出すことなく、分割されたセッションから回復することができる。分割されたセッションの場合でも「高速」同期を維持することにより、通信ラウンドトリップの数が減少される。ラウンドトリップの数が減少されることで、メッセージ/パケットロスを減少し又は最小とすることができる。] [0133] 同期プロトコル140は、通常の環境でトランスポートメッセージ(HTTP要求/応答ラウンドトリップ)の数を最小にするように設計される。「高速」同期モードに留まる能力は、より少ない量のデータを交換することにより各同期プロセスに対する帯域巾使用及び努力を最小にすることができる。更に、頻繁な高速同期は、装置110/サーバー120対が互いに著しくドリフトしないことを意味する。換言すれば、装置110及びサーバー120は、高速同期なしに可能である以上に同期状態に留まる。又、このワイヤレス「トリクル同期」は、優れたユーザ経験を生み出すことができる。] [0134] ある事象は、高速同期対(例えば、クライアント装置110及びサーバー120対)が低効率の同期モード(例えば、低速同期モード)を頼りにすることができるようにする。これらの事象は、装置データの崩壊、同期セッションの中断、一貫した同期アンカーへの合意の失敗、データ構造のリセット(例えば、ユーザが別のマシンからのデータクラスに対して完全に新しいデータセットをプッシュしたとき)を含む。同期プロトコル140は、悲観的であることを回避し、問題が生じたときに低速同期へ戻る必要性を最小にするか又は排除することができる。] [0135] 同期プロトコル140は、クライアント装置110とサーバー120との間のデータ同期を最適にするために種々の技術を実施する。例えば、最適化技術は、楽観的ネゴシエーション及びコミットを可能にする同期段階圧縮;複数データクラスステートマシンのパラレル実施;同期アンカーチェックポイントの使用;及びセッションの頑健性を可能にすることを含む。] [0136] 図24は、同期セッションの一例を示す。クライアント装置110とサーバー120との間の同期セッションは、種々のメッセージ2410、2420、2430、2440、2450及び2460を含む。例えば、メッセージ1 2410は、送信者により受信者へ送信される。図24に示す例では、送信者がクライアント装置110であり、受信者がサーバー120である。メッセージ1 2410は、同期セッションに対する同期モードをネゴシエートするためにsync−startコマンドを含む。メッセージ1 2410に応答して、受信者は、sync−startコマンド応答のようなコマンド応答を含むメッセージ2 2420を送信する。コマンド応答は、メッセージ1 2410に含まれたコマンドが成功か、失敗か、等を指示するための状態を含む。メッセージ2 2420が終わると、第1ラウンドトリップが完了する。必要に応じて、付加的なメッセージn、n+1、n+2、等を交換して、同期セッションを完了することができる。同期セッションは、例えば、最終的メッセージn+1を受信すると、終了する。ある実施形態では、付加的な任意のメッセージ2450、2460、等を交換することができる。] 図24 [0137] 図25は、クライアント装置110とサーバー120との間の最適な高速又はリセットデータ同期の一例を示す。同期段階圧縮は、クライアント装置110が個別の同期ステートマシン段階を圧縮できるようにする。例えば、クライアント装置110は、おそらく、同期モードが「高速」又は「リセット」になると考えるときに、ネゴシエーション(“sync−start”)及びプル段階コマンド(“sync−changes”)を第1メッセージ2510においてサーバー120へ送信する。同期段階圧縮は、サーバー120が要求された同期モードを拒絶する場合に無駄なネットワークトラフィックを最小にするか又は排除することができる。図25に示す例では、クライアント装置110は、“sync−start”及び“sync−change”コマンドを含む第1メッセージ2510を送信する。しかしながら、サーバー120は、“sync−commit”コマンドを第2メッセージ2520において送信しない。むしろ、サーバー120は、“sync−start”応答、“sync−changes”応答、及び“sync−changes”コマンドを第2メッセージ2520において送信する。第2のラウンドトリップ2530において、クライアント装置110は、sync−change応答及び“sync−commit”コマンドを送信する。サーバー120は、“sync−commit”応答で応答する。] 図25 [0138] 図26は、クライアント装置110とサーバー120との間の最適な高速又はリセット同期の別の例を示す。クライアント装置110は、ネゴシエーション(“sync−start”)及びプル段階コマンド(“sync−changes”)を第1メッセージ2610においてサーバー120へ送信する。sync−startネゴシエーションコマンドは、データクラス、アンカー及び同期モードを指示するパラメータを含むことができる。図26に示す例では、高速同期モードが指示される。] 図26 [0139] 図26に示す例において、同期サーバー120は、所与のデータクラスに対する“sync−changes”及び“sync−commit”コマンドを同じメッセージにおいて送信することにより、プッシュ及びコミット段階を圧縮する。sync−start及びsync−changeコマンドに応答して、サーバー120は、第2メッセージ2620においてsync−startコマンド応答(OK、データクラス、アンカー)及びsync−changeコマンド応答(OK、データクラス)で応答する。更に、サーバー120は、sync−changesコマンド(データクラス、変化)及びsync−commitコマンド(データクラス、アンカー)を第2メッセージ2620に含ませて、1つのラウンドトリップを完了させることができる。従って、この楽観的解決策は、単一のHTTPラウンドトリップでデータ同期を完了させることができる。] 図26 [0140] クライアント装置110が第2メッセージ2620におけるサーバー120の“sync−changes”コマンドに対して第2のラウンドトリップ2630においてidmapのための任意のメッセージで応答するときには2つのラウンドトリップでデータ同期を完了させることができる。又、クライアント装置110は、任意のメッセージにおいてsync−commit応答を送信することもできる。] [0141] ある実施形態では、クライアント装置110は、サーバー120へのidmapの送信をその後のセッションまで延期し、そしてsync−commit応答の送信を省略する。というのは、サーバー120は、コマンドが受け取られ、そしてその後のセッションで送信される同期アンカーと比較することで処理されることを推測できるからである。図27は、クライアントとサーバーとの間の規範的データ同期を示し、ここで、装置は、サーバーの手前のメッセージが最終的なものであるときに“sync−changes”又は“sync−commit”に対するコマンド応答の送信を省略する。この場合に、保留中のidメッセージは、(必要があれば)その後の同期セッションにおいてサーバー120へ送信される。] 図27 [0142] 第1メッセージ2710において、クライアント装置110は、図25を参照して述べたように、ネゴシエーション及びプル段階を圧縮する。それに応答して、サーバー120は、図26を参照して述べたようにプッシュ及びコミット段階を圧縮して第2メッセージ2720を送信する。第1セッションは、1つのラウンドトリップで完了される。] 図25 図26 [0143] 第3メッセージ2730においてプル及びネゴシエーション段階を圧縮してクライアント装置110により第2の同期セッションが開始される。更に、第1セッションから先延ばしされた保留中のidmapがサーバー120へ送信される。サーバー120は、第4メッセージ2740において、sync−changes及びsync−commitコマンドで応答する。] [0144] 図28は、低速同期の例を示す。クライアント装置110は、次の同期モードが「低速」同期モードになると考えるときには、ネゴシエーション及びプル段階を圧縮しない。というのは、その全データセットを初期の要求メッセージ2810においてサーバー120へ送信することは、例えば、処理コストに関して高価になるからである。更に、サーバー120が「リセット」同期モードに対してネゴシエーションしたことを検出すると、データの送信は、帯域巾を浪費することになる。] 図28 [0145] この低速同期モードでは、クライアント装置110は、第1メッセージ2810において識別されたデータクラス、アンカー及び低速同期モードでsync−startコマンドを送信する。サーバー120は、第2メッセージ2820において、sync−start応答で応答する。第3メッセージ2830(第2ラウンドトリップ)では、クライアント装置110は、データクラスに対するsync−changesコマンドを送信する。サーバー120は、次のメッセージ2840において、sync−changes応答(OK、データクラス)、sync−changesコマンド(データクラス)、及びsync−commitコマンド(データクラス、アンカー)を含ませることにより応答する。第3ラウンドトリップ2850では、クライアント装置110は、sync−changes応答(OK、データクラス、idmap)及びsync−commit応答(OK)を送信する。] [0146] 図29は、複数のデータクラスをパラレルに同期させる一例を示す。複数のデータクラスステートマシンをパラレル(並列)に実施することで、複数のデータクラスをパラレルに同期させることができる。全ての“sync”ファミリーコマンドにおいて必要な“uri”パラメータにより指定される各データクラスは、それ自身の個別のステートマシンを動作させる。従って、最適なケースでは、全てのデータクラスが単一のトランスポートラウンドトリップにおいて高速同期することができる。比較として、他の同期プロトコル、例えば、オープンモバイルアリアンス−データ同期プロトコル(以前はSyncMLプロトコルとして知られていた)OMA DS/SyncMLは、シリアルに同期し、データクラス当たり5つ以上のラウンドトリップを要求する。] 図29 [0147] 図29に示す例では、連絡先、カレンダー及びブックマークのような複数のデータクラスがパラレルに同期される。第1メッセージ2910において、クライアント装置110は、これらデータクラスに対するsync−startコマンドをパラレルに送信する。同じメッセージ2910において、クライアント装置110は、複数のデータクラスに対するsync−changesコマンドも送信する。サーバー120は、複数のデータクラスに対してsync−start応答及びsync−changes応答を伴う応答2920を送信する。例えば、サーバー120からのsync−start応答は、カレンダーデータクラスがネゴシエーション失敗のためにサーバー120においてリセットされることを述べる。更に、カレンダーに対するsync−changes応答は、カレンダーのデータクラスに対して変化が処理されなかったことを述べる。連絡先及びブックマークに対するsync−startコマンドは、sync−start応答のOK状態により示されたように成功である。連絡先及びブックマークに対するsync−changesコマンドは、sync−changes応答のS_NotCompleted状態により示されたように完了していない。] 図29 [0148] 次のメッセージ2930において、クライアント装置110は、リセット同期(手前のカレンダーのsync−startコマンド応答においてサーバーにより要求される同期モード)を要求する別のsync−startコマンドと、空きアイテムパラメータを伴うカレンダーデータクラスに対するsync−changesコマンドとを送信する。サーバー120は、次のメッセージ2940において、連絡先、カレンダー及びブックマークデータクラスに対するsync−start応答及びsync−changes応答;連絡先及びブックマークに対するsync−changes応答;より多くの変化が保留中であることを指示するカレンダーに対するsync−changesコマンド;及び連絡先及びブックマークに対するsync−commitコマンド;で応答する。これら2つのメッセージ2930及び2940は、第2のラウンドトリップを構成する。] [0149] 第3のラウンドトリップは、連絡先、カレンダー及びブックマークに対するsync−changes応答を伴うクライアント装置からのメッセージ2950で始まる。このメッセージ2950は、連絡先及びブックマークに対するsync−commit応答を含む。第3のラウンドトリップを完了するために、サーバー120は、データクラスに対するsync−changesコマンド及びsync−commitコマンドを次のメッセージ2960においてクライアント装置110へ送信する。従って、3つのトランスポートプロトコルラウンドトリップだけで、複数のデータクラスの同期、同期モード再ネゴシエーション(カレンダーはサーバーにおいてリセットされた)、及び分割sync−changes(サーバーからのカレンダー変化はメッセージ2940及びメッセージ2960において送信された)を完了することができる。] [0150] クライアント装置110が、idmapを伴うカレンダーに対するsync−changes応答、及びsync−commit応答をサーバー120へ送信できるようにするために、任意の第4ラウンドトリップ2970を実施することができる。] [0151] サーバー120は、全てのデータクラスがプル段階を完了する(即ち、第3メッセージを受信するとき)まで混合段階を遂行しない。これは、サーバー120が単一の同期ジョブにおいて全ての作業を遂行できるようにする。サーバーは、全てのデータクラスに対するクライアント110の全ての変化がサーバー120により受け取られるまで他のデータクラスに対するS_NotCompletedを送信する。] [0152] Sync Anchorチェックポイント 同期プロトコルは、追跡可能な同期セッションを編成して維持するためにコマンド及びコマンド応答に“sync anchors(同期アンカー)”を使用する。サーバー120は、その内部バージョニングメソッドに対してコマンド及びコマンド応答におけるアンカーを管理することができる。] [0153] sync anchorsは、クライアント装置110及びサーバー120が同期プロセス中に交換する不透明なデータである。アンカーは、同期セッションの同期モードを決定するためにネゴシエーション段階中に交換することができる。次いで、コミット段階中に、アンカーの新たなセットを交換し、その後の同期セッション中に使用するように存続させることができる。比較として、他の同期プロトコルは、同期セッションの始めにアンカーを使用し、そしてアンカーは、同期セッションが首尾良く完了したときだけ更新されるか、或いはセッションがキャンセルされるか又は予期せず終了する場合にロールバックされる。] [0154] ネゴシエーション中の予想されるアンカーと実際のアンカーとの食い違い(アンカー不一致として知られている)は、低速同期を生じさせるか、或いは最低でも、失敗した同期セッションからの全てのデータの再送信を生じさせる。信頼性のないデータネットワークでは、これは、全く進行が生じない状況を招き、サーバーとの同期は、外部条件が変化するまで同期を首尾良く完了することが実際上阻止される。予期せぬセッションの失敗も、次の同期セッションにおけるアンカー不一致を招くことになる。] [0155] OTA同期プロトコル140は、サーバー120が、同期セッション中に種々のチェックポイントにおいて更新されたアンカーを任意に返送できるようにする。“anchor”パラメータは、いかなる同期ファミリーコマンド又はコマンド応答にも存在する。チェックポイントアンカーは、“next_server_anchor”エレメントを含み、且つ“mode”エレメントを含む。これは、sync anchorsの微粒度更新を行って、アンカー不一致のおそれ及び影響を低減できるようにする。各サーバーアンカーは、アンカーが発生されたときの内部サーバー状態に関する正確な情報をサーバー120に与える情報でエンコードされる。例えば、サーバーアンカーは、クライアント装置110から要求された変化が中央データベースと混合されたかどうかの情報でエンコードすることができる。又、サーバーアンカーは、どの更新がクライアント装置110によって受け容れられたかの情報でエンコードすることもできる。更に、サーバーアンカーは、同期セッションが正常に完了したかどうかの情報でエンコードすることもできる。サーバーアンカーにおいて他の内部サーバー状態をエンコードすることもできる。] [0156] 規範的なアンカーチェックポイントは、クライアント装置の最終的な“sync−changes”コマンドに応答して“end of server mingle phase(サーバー混合段階の終了)”を含むことができる。又、アンカーチェックポイントは、とりわけ、分割“sync−changes”及びコミット段階中のポイントを含むこともできる。] [0157] サーバー120は、チェックポイントアンカーを追加するための時間及び位置をインテリジェントに判断することができる。チェックポイントアンカーは、それが“sync−changes”コマンドに入れられたときには、受信したデータセットがデータクラススキーマのデータ完全性要件を守らせることを保証する。例えば、データ完全性要件は、チェックポイント付きのデータセットにおける未知のエンティティへの参照をもたせないことを含む。プル段階が完了した後に、最も最近のチェックポイントアンカーは、同期セッションがキャンセルされた場合でも、クライアント装置110によってセーブすることができる。] [0158] 同期サーバー120は、チェックポイントアンカーを、それがもはや必要でないとき、或いはチェックポイント状態を維持するのに使用される関連サーバー側リソースをサーバーが解除する必要があるとき、満了とさせる。クライアント装置110が未知の又は満了となったチェックポイントアンカーを供給するときには、同期セッションが、依然、低速同期モードに入る。] [0159] 次の同期セッションのネゴシエーション段階中、即ち“sync−start”コマンド中に、クライアント装置110は、その最後にセーブしたアンカーをサーバー120へ送信する。サーバー120は、手前の同期セッションが予期せず終了しても、又は“sync−commit”コマンド応答がサーバー120へ明確に返送されなくても、これらアンカーにエンコードされた情報を使用して、最も最近セーブされたチェックポイントから同期セッションをスタートさせる。クライアント装置110は、それが同期セッション中にそのようなアンカーを受け取ると、サーバーからの最も最近のアンカーを保持し、そして次の同期セッションに対する“sync−start”コマンドにおいて送信するためにその値をセーブする。] [0160] 図30は、チェックポイントアンカーを使用する規範的同期セッションを示す。クライアント装置110は、メッセージ3010を送信することにより同期セッションを開始する。クライアント装置110は、メッセージ3010にアンカー、a0を使用する。このアンカー、a0は、手前の同期セッションからの最後のサーバーアンカー値である。クライアント装置110及び同期サーバー120は、他のメッセージ3020、3030、3040、3050及び3060を必要に応じて交換する。同期セッション中の種々のポイントにおいて、同期サーバー120は、これらのメッセージ3020、3030、3040、3050及び3060を使用して、チェックポイントアンカーa1、a2及びa3を返送する。] 図30 [0161] 同期サーバー120からの“anchors”エレメントを含む各メッセージを受信して処理すると、クライアント装置110は、そのアンカーを更新する。同期セッションが中断するか又はメッセージが失われると、クライアント装置は、それが首尾良く処理した最後のアンカーを次のセッションの“sync−start”コマンドにおいて供給する。どのアンカー値が受け取られるかに基づき、同期サーバー120は、必要に応じて手前の同期を完了させるためにどのアクションを取らねばならないか推測することができる。従って、非常に繊細なワイヤレスネットワークでも、又は大きなデータセットを送信する必要があるときでも、増分的な同期進行を行うことができる。] [0162] 図31は、規範的チェックポイントアンカーを示すテーブルである。このテーブルは、考えられるチェックポイントアンカー3110、それに関連した同期段階3120、及びチェックポイントアンカーに関連したサーバー状態3130を記述する列を含む。例えば、アンカーa0は、サーバー状態に変化を生じさせないネゴシエーション段階を表すことができる。アンカーa1は、プッシュ段階を表すことができる。サーバー120は、クライアント装置110により要求される変化を適用し、そしてサーバー120は、その変化のパート1をクライアント装置110へ送信する。アンカーa2は、サーバー120により開始されるプッシュ段階を表す。サーバーは、その変化のパート2をクライアント装置110へ送信する。アンカーa3は、コミット段階を表し、そして変化をコミットすることが完了したことを信号することができる。このアンカーは、同期セッションが完了したことを信号する。] 図31 [0163] 装置の設定 同期プロトコル120は、サーバー120が装置設定及び能力を動的に要求するためのメカニズムをなす。“get”及び“put”コマンドは、情報を交換するのに使用される。いつでも、サーバー120は、例えば、装置設定及び能力を要求するために値“deviceinfo”をもつ“uri”パラメータと共に“get”コマンドを送信する。或いは又、クライアント装置110は、同じ“uri”パラメータと共に“put”コマンドをサーバー120へ送信する。“uri”パラメータの値は、種々のキー値対を含むディクショナリーである。“userid”の値は、それが存在するとき、認証原理を表し、ストリングとして実施される。“authtype”の値は、それが存在するとき、認証スキームを表し、ストリングとして実施される。“auth”の値は、それが存在するとき、認証クレデンシャルを表し、ストリングとして表現される。受信者は、オペレーションを遂行しようとするときに、状態S_OK(600)のような成功状態を返送する。要求されたURIが未知であるときは、受信者は、URIが見つからず未知であることを指示するために状態E_NotFound(603)のような状態を返送する。要求されたオペレーションが許されず、例えば、許可された原理が、URIを削除することが許されないときには、受信者は、要求されたオペレーションが許されないことを指示するために状態E_NotAllowed(604)のような状態を返送する。供給されたデータが誤ったものであるために要求されたオペレーションを遂行できないときには、受信者は、要求されたオペレーションを遂行できないことを指示するために状態E_BadValue(607)のような状態を返送する。供給された“itemtype”が誤ったものであるために要求されたオペレーションを遂行できないときには、受信者は、要求されたオペレーションがサポートされないことを指示するために状態E_NotSupported(614)のような状態を返送する。] [0164] 図32は、“uri”パラメータに対する規範的キー値対のテーブルを示す。“uri”パラメータに対する使用可能なキー3210は、version(バージョン)、msisdn、deviceid、name(名前)、model(モデル)、carrir(キャリア)及びdataclass(データクラス)を含む。version、msisdn、deviceid、name、model及びcarrirキーに対する関連値3220は、ストリング値である。dataclassキーに対する値3220は、ディクショナリーである。又、このテーブルは、これらキーに対する関連記述3230も示している。例えば、versionキー値は、バージョン1.1.4のような製品バージョンを記述することができる。msisdnキー値は、現在インストールされたSIMカードの電話番号を記述することができる。deviceidキー値は、ICCIDを記述することができる。nameキー値は、EctoPhoneのようなユーザ装置名を記述することができる。modelキー値は、クライアント装置110のモデル、例えば、iPhone(登録商標)、iPod Touch(登録商標)、等を記述することができる。carrirキー値は、AT&T(登録商標)、Verizon(登録商標)、等の電信会社を記述することができる。dataclassキー値は、データクラスを記述することができる。] 図32 [0165] クライアント装置110が最初にサーバー120と同期するときには、サーバー120は、“get”コマンドを送信することにより装置情報を要求する。その後、装置情報が変化したときに、クライアント装置110は、“put”コマンドを送信することによりその変化した装置情報をサーバー120へ送信する。] [0166] フィルタリング フィルタリングは、クライアント装置110と同期したデータアイテムのセットを、データアイテムの値に基づいて限定する能力である。例えば、ユーザは、グループのあるセット内に含まれた連絡先のみと同期することを希望するか、現在日付の周りのある時間窓内のカレンダー事象と同期することを希望する。] [0167] iTunes(登録商標)のようなデータ共有/管理アプリケーションでは、iPhone(登録商標)のようなクライアント装置110へ送られるデータアイテムのセットを限定又はフィルタリングするためにケーブル同期中にコンピュータによりフィルター設定が実施される。同期プロトコル140は、ワイヤレス同期解決策における同様のフィルタリング機能を与える。iTunes(登録商標)からの同じフィルター設定が、ユーザアクションを必要とせずに、サーバー120により実施される。従って、フィルタリングは、自動的に行うことができる。或いは又、実施されるべきフィルター設定をユーザが表示して編集できるようにするために、クライアント装置110におけるユーザインターフェイス(UI)をユーザに提示することもできる。] [0168] 同期プロトコル140は、プリミティブコマンドを使用してクライアント装置110とサーバー120との間でフィルター設定を交換できるようにする。フィルターの情報は、“dataclass/<dataclassname>/filter”の形態の“uri”パラメータを使用して指定することができる。フィルター情報の値は、ディクショナリーである。] [0169] 図33は、フィルター設定に対する規範的なキー値を示すテーブルである。フィルター設定に対して使用可能なキー3310は、default_container、constrain_container及びdiscard_after_daysを含む。これらフィルター設定キーの値3320は、各々、ストリング、アレイ、及びストリングである。default_containerキーのデータクラス120は、連絡先及びカレンダーを含む。又、constrain_containerキーのデータクラス120は、連絡先及びカレンダーを含む。又、discard_after_daysキーのデータクラス120は、カレンダーを含む。] 図33 [0170] default_containerキーは、連絡先に対するグループID及び事象に対するカレンダーIDのような、コンテナエンティティの識別(LUID)を記述する。constrain_containerキーは、含むべきグループのセットのような、含むべきコンテナエンティティのLUIDのセットを記述する。discard_after_daysキーは、記述された日数より古い事象を削除しなければならないところの日数を記述する。] [0171] 図34は、擬似バッカス・ナウアフォーム(ABNF)のダイアグラムの一例である。擬似バッカス・ナウアフォームは、シンタックスを記述する便利な仕方である。BNFは、文脈自由文法を表現できるメタシンタックスである。文脈自由文法は、語彙ルール及び構文ルールの2組のルールを使用することによってプログラミング言語のシンタックスを定義することができる。増強型BNFは、異なる命名ルール、繰り返し、代替、順序独立性、及び値範囲を使用するBNFの変更バージョンである。] 図34 [0172] 図35は、規範的な同期セッションを示す。図35に示す規範的な同期セッションは、分割同期変化及びプットフィルター情報を含む。クライアント装置110は、ネゴシエーション段階コマンド(“sync−start”)及びプル段階コマンド(“sync−changes”)を第1メッセージ3510においてサーバー120へ送信する。プットコマンドは、特定のデータクラスに対するデータアイテムを送信するのに使用される。図35に示す例では、プットコマンドで指示されたデータクラスは、連絡先である。又、データアイテムは、データをデータクラスに対して同期されるものに限定するようフィルタリングされる。] 図35 [0173] 第2メッセージ3520において、サーバー120は、連絡先データクラスに対しネゴシエーションの成功を指示するために状態“S_OK”と共にsync−startコマンド応答を送信することにより応答する。更に、アンカーを使用してチェックポイントを指示する。又、サーバー120は、データクラスに対する全ての適当なデータアイテムがコマンドパラメータに含まれるのではないことを指示する“more”ブーリアンフラグと共に連絡先データクラスに対するsync−changesコマンドを送信する。更に、第2メッセージ3520は、プットの成功を指示するために“S_OK”状態と共にプットコマンド応答を含むことができる。] [0174] 第3メッセージ3530において、クライアント装置110は、uriパラメータにより指示された連絡先データベースに対して“S_OK”状態と共にsync−changesコマンド応答を含む。又、例えば、GUID_LUIDマッピングを与えるために、idmapも含まれる。第4メッセージ3540において、サーバー120は、連絡先データクラスを指示するためにuriパラメータと共にsync−changesコマンドを送信する。又、より多くのデータが続くことを指示するために“more”ブーリアンが含まれる。第5メッセージ3550では、クライアント装置110は、連絡先データクラスに対する更新の成功を指示するために“S_OK”状態と共にsync−changesコマンド応答を送信する。第6メッセージ3560において、サーバー120は、連絡先データクラスに対してsync−changesコマンド及びsync−commitコマンドを送信する。クライアント装置110は、第7メッセージ3570において、更新の成功を指示するためにsync−changesコマンド応答で応答する。又、クライアント装置110は、クライアント装置が変化をコミットしたことを指示するためにsync−commit応答(OK)も含む。最後のメッセージ3580は、同期セッションの最終メッセージを指示するために空きメッセージ本体を有する。] [0175] 図36、37a、37b、38a、38b、38c、38d、39a、39b、39c、40a及び40bは、同期セッションに対するワイヤトレース例を示す。図36は、リセット同期セッションに対する4つの規範的メッセージの概要を示す。図37a及び37bは、クライアント装置110からサーバー120へ送られる規範的メッセージを示す。sync−startコマンドは、データクラスを示す値“com.apple.Contacts”と共にuriパラメータを含む。又、同期モードは、“reset”として指示される。又、メッセージは、同じデータクラス(com.apple.Contacts)及び空き変化と共にsync−changesコマンドを含む。] 図36 図37a
权利要求:
請求項1 データを同期する方法において、同期セッションを開始する要求を受け取るステップであって、その要求は、1つ以上のデータクラスの各々に対する提案された同期モード、及び1つ以上のデータクラスへの1つ以上の変化、を含むものであるステップと、各データクラスに対する提案された同期モードが受け容れられるかどうか指示するための1つ以上の状態コードを発生するステップと、前記発生された状態コードに基づき、各データクラスに対する前記受け容れられた同期モードを使用して、1つ以上のデータクラスへの1つ以上の変化に関連した1つ以上のデータアイテムを選択的に更新するステップと、前記更新された1つ以上のデータアイテムをサーバーにおいて選択的にコミットするステップと、を備えた方法。 請求項2 1つ以上の状態コードを発生する前記ステップは、以前の同期セッションからセーブされた情報にアクセスして、1つ以上のデータアイテムを同期するのにその提案された同期モードを使用すべきかどうか決定することを含む、請求項1に記載の方法。 請求項3 要求を受け取る前記ステップは、2つ以上のデータクラスに対する提案された同期モードをパラレルに受け取ることを含む、請求項1に記載の方法。 請求項4 要求を受け取る前記ステップは、高速同期モード、低速同期モード又はリセット同期モードを含む提案された同期モードを受け取ることを含む、請求項1に記載の方法。 請求項5 要求を受け取る前記ステップは、更新されるべきデータアイテムの交換だけを可能にする高速同期モードを含む提案された同期モードを受け取ることを含む、請求項1に記載の方法。 請求項6 同期セッションが中断した後に、高速同期モードを再受け容れするステップを更に備えた、請求項5に記載の方法。 請求項7 同期セッションを、2つのメッセージを含む1つのラウンドトリップで完了するステップを更に備えた、請求項1に記載の方法。 請求項8 要求を受け取る前記ステップは、前記提案された同期モード、及び1つ以上のデータクラスへの1つ以上の変化を、クライアント装置からの単一のメッセージで受け取る、ことを含む請求項1に記載の方法。 請求項9 選択的にコミットする前記ステップは、前記更新された1つ以上のデータアイテムをコミットするコマンドをクライアント装置が送信するときに、前記更新された1つ以上のデータアイテムをサーバーにおいて選択的にコミットする、ことを含む請求項1に記載の方法。 請求項10 前記提案された同期モードを拒絶するステップと、異なる同期モードで要求に応答するステップと、を更に備えた請求項1に記載の方法。 請求項11 コンピュータ読み取り可能な媒体において実施されるコンピュータプログラム製品であって、データ処理装置が、同期セッションを開始する要求を受け取り、その要求は、1つ以上のデータクラスの各々に対する提案された同期モード、及び1つ以上のデータクラスへの1つ以上の変化、を含むものであり、各データクラスに対する提案された同期モードが受け容れられるかどうかを表す状態コードを発生し、その発生された状態コードに基づき、各データクラスに対する受け容れられた同期モードを使用して、1つ以上のデータクラスへの1つ以上の変化に関連した1つ以上のデータアイテムを選択的に更新し、その更新された1つ以上のデータアイテムをデータレポジトリーにおいて選択的にコミットする、ことを含むオペレーションを遂行するようにさせるよう動作できるコンピュータプログラム製品。 請求項12 更に、データ処理装置が、以前の同期セッションからセーブされた情報にアクセスして、1つ以上の状態コードを発生するようにさせるよう動作できる、請求項11に記載のコンピュータプログラム製品。 請求項13 更に、データ処理装置が、2つ以上のデータクラスに対する提案された同期モードをパラレルに受け取るようにさせるよう動作できる、請求項11に記載のコンピュータプログラム製品。 請求項14 更に、データ処理装置が、高速同期モード、低速同期モード又はリセット同期モードを含む提案された同期モードを受け取るようにさせるよう動作できる、請求項11に記載のコンピュータプログラム製品。 請求項15 更に、データ処理装置が、更新されるべきデータアイテムの交換のみを可能にする高速同期モードを含む提案された同期モードを受け取るようにさせるよう動作できる、請求項11に記載のコンピュータプログラム製品。 請求項16 同期セッションが中断されたときに高速同期モードを再開することを更に含む、請求項15に記載のコンピュータプログラム製品。 請求項17 更に、データ処理装置が、2つのメッセージを含む1つのラウンドトリップで同期セッションを完了するようにさせるよう動作できる、請求項11に記載のコンピュータプログラム製品。 請求項18 更に、データ処理装置が、提案された同期モード及び1つ以上のデータクラスへの1つ以上の変化をクライアント装置からの単一のメッセージで受け取るようにさせるよう動作できる、請求項11に記載のコンピュータプログラム製品。 請求項19 更に、データ処理装置が、更新された1つ以上のデータアイテムをコミットするコマンドをクライアント装置が送信するときに、更新された1つ以上のデータアイテムをサーバーにおいて選択的にコミットするようにさせるよう動作できる、請求項11に記載のコンピュータプログラム製品。 請求項20 更に、データ処理装置が、提案された同期モードを拒絶し、及び前記要求に異なる同期モードで応答する、ことを含むオペレーションを遂行するようにさせるよう動作できる、請求項11に記載のコンピュータプログラム製品。 請求項21 同期サーバーにおいて、1つ以上のクライアント装置への1つ以上の接続をオープンすることのできるトランスポートプロトコル、及びそのオープンされた1つ以上の接続を経て前記サーバーと1つ以上のクライアント装置との間のデータ同期を可能にする同期プロトコル、を動作するよう構成されたプロセッサを備え、前記同期プロトコルは、前記サーバーが、同期セッションを開始する要求を受け取れるようにし、この要求は、1つ以上のデータクラスの各々に対する提案された同期モードと、1つ以上のデータクラスへの1つ以上の変化とを含むものであり、更に、各データクラスに対する提案された同期モードが受け容れられるかどうか指示するための1つ以上の状態コードを発生し、前記発生された状態コードに基づいて、各データベースに対する受け容れられた同期モードを使用して、1つ以上のデータクラスへの1つ以上の変化に関連した1つ以上のデータアイテムを選択的に更新し、前記更新された1つ以上のデータアイテムを選択的にコミットする、ことができるようにするものである、サーバー。 請求項22 前記プロセッサは、受け取られた1つ以上の変化に基づいて1つ以上のデータアイテムを更新するためにデータレポジトリーにアクセスするように構成される、請求項21に記載のサーバー。 請求項23 前記プロセッサは、各データクラスに対する提案された同期モードを、以前の同期セッションからセーブされた情報に基づいて受け容れ又は拒絶するように同期プロトコルを動作するよう構成される、請求項21に記載のサーバー。 請求項24 前記プロセッサは、2つ以上のデータクラスに対する提案された同期モードをパラレルに受け取るように同期プロトコルを動作するよう構成される、請求項21に記載のサーバー。 請求項25 前記プロセッサは、高速同期モード、低速同期モード又はリセット同期モードを含む提案された同期モードを受け取るように同期プロトコルを動作するよう構成される、請求項21に記載のサーバー。 請求項26 前記プロセッサは、更新されるべきデータアイテムだけを1つ以上のクライアント装置が送信できるようにする高速同期モードを含む提案された同期モードを受け取るように同期プロトコルを動作するよう構成される、請求項21に記載のサーバー。 請求項27 前記プロセッサは、同期セッションが中断されたときに高速同期を再開する要求を受け取るように同期プロトコルを動作するよう構成される、請求項26に記載のサーバー。 請求項28 前記プロセッサは、2つのメッセージを含む1つのラウンドトリップで同期セッションを完了するように同期プロトコルを動作するよう構成される、請求項21に記載のサーバー。 請求項29 前記プロセッサは、提案された同期モード及び1つ以上のデータクラスへの1つ以上の変化を、1つ以上のクライアント装置のうちの少なくとも1つからの単一のメッセージで受け取るように、同期プロトコルを動作するよう構成される、請求項21に記載のサーバー。 請求項30 前記プロセッサは、1つ以上のクライアント装置のうちの1つが、更新された1つ以上のデータアイテムをコミットするコマンドを送信するときに、更新された1つ以上のデータアイテムをサーバーにおいて選択的にコミットするように、同期プロトコルを動作するよう構成される、請求項21に記載のサーバー。 請求項31 前記プロセッサは、提案された同期モードを拒絶し、及び異なる同期モードで要求に応答する、ように同期プロトコルを動作するよう構成される、請求項21に記載のサーバー。 請求項32 データを同期する方法において、同期セッションを開始するためにサーバーへ要求を送信するステップであって、その要求は、1つ以上のデータクラスの各々に対する提案された同期モード、及び1つ以上のデータクラスへの1つ以上の変化、を含むものであるステップと、各データクラスに対する提案された同期モードがサーバーにより受け容れられたかどうか指示する1つ以上の同期コードを受け取るステップと、その受け取られた状態コードに基づいて、受け容れられた同期モードを使用して、1つ以上のデータクラスへの付加的な変化をサーバーから受け取るステップと、クライアント装置において、サーバーから受け取られた付加的な変化をコミットするステップと、を備えた方法。 請求項33 1つ以上のデータクラスのうちの少なくとも1つに対する提案された同期モードがサーバーにより拒絶されたことを指示する1つ以上の状態コードを受け取るステップと、前記拒絶された同期モードとは異なる同期モードを含む別の要求を送信するステップと、を更に備えた請求項32に記載の方法。 請求項34 前記提案された同期モード及び1つ以上の変化を単一のメッセージにおいてサーバーへ送信するステップを更に備えた、請求項32に記載の方法。 請求項35 2つ以上のデータクラスに対する提案された同期モードをパラレルに送信するステップを更に備えた、請求項32に記載の方法。 請求項36 2つ以上のデータクラスに対する提案された同期モードをパラレルに送信する前記ステップは、2つ以上のデータクラスの各々に対して異なる提案された同期モードをパラレルに送信することを含む、請求項35に記載の方法。 請求項37 2つ以上のデータクラスの各々に対して異なる提案された同期モードをパラレルに送信することは、1つのデータクラスに対して提案された高速同期モードを送信し、そして別のデータクラスに対して提案された低速同期モードを送信することを含む、請求項35に記載の方法。 請求項38 同期セッションが中断された後に、受け容れられた同期プロトコルを使用して同期セッションを再開するステップを更に備えた、請求項32に記載の方法。 請求項39 コンピュータ読み取り可能な媒体において実施されるコンピュータプログラム製品であって、データ処理装置が、同期セッションを開始する要求をサーバーへ送信し、その要求は、1つ以上のデータクラスの各々に対する提案された同期モードと、1つ以上のデータクラスへの1つ以上の変化とを含むものであり、更に、各データクラスに対する提案された同期モードがサーバーにより受け容れられるかどうかを表す1つ以上の状態コードを受け取り、前記受け取った状態コードに基づき、前記受け容れられた同期モードを使用して、1つ以上のデータクラスへの付加的な変化をサーバーから受け取り、前記サーバーから受け取ったその付加的な変化をクライアント装置においてコミットする、ことを含む1つ以上のオペレーションを遂行するようにさせるよう動作できる、コンピュータプログラム製品。 請求項40 更に、データ処理装置が、1つ以上のデータクラスのうちの少なくとも1つに対する提案された同期モードがサーバーにより拒絶されたことを指示する1つ以上の状態コードを受け取り、その拒絶された同期モードとは異なる同期モードを含む別の要求を送信する、ことを含むオペレーションを遂行するようにさせるよう動作できる、請求項39に記載のコンピュータプログラム製品。 請求項41 更に、データ処理装置が、提案された同期モード及び1つ以上の変化を単一のメッセージにおいてサーバーへ送信するようにさせるよう動作できる、請求項39に記載のコンピュータプログラム製品。 請求項42 更に、データ処理装置が、2つ以上のデータクラスに対する提案された同期モードをパラレルに送信するようにさせるよう動作できる、請求項39に記載のコンピュータプログラム製品。 請求項43 更に、データ処理装置が、2つ以上のデータクラスの各々に対する異なる提案された同期モードをパラレルに送信するようにさせるよう動作できる、請求項42に記載のコンピュータプログラム製品。 請求項44 更に、データ処理装置が、1つのデータクラスに対して提案された高速同期モードをそして別のデータクラスに対して提案された低速同期モードを送信させるよう動作できる、請求項42に記載のコンピュータプログラム製品。 請求項45 更に、データ処理装置が、同期セッションが中断された後に、受け容れられた同期プロトコルを使用して同期セッションを再開するようにさせるよう動作できる、請求項39に記載のコンピュータプログラム製品。 請求項46 クライアント装置において、サーバーへの1つ以上の接続をオープンすることのできるトランスポートプロトコル、及びそのオープンされた1つ以上の接続を経て前記クライアント装置と前記サーバーとの間のデータ同期を可能にする同期プロトコル、を動作するように構成されたプロセッサを備え、前記同期プロトコルは、前記クライアント装置が、同期セッションを開始する要求をサーバーへ送信し、その要求は、1つ以上のデータクラスの各々に対する提案された同期モードと、1つ以上のデータクラスへの1つ以上の変化とを含むものであり、更に、各データクラスに対する提案された同期モードがサーバーによって受け容れられたかどうかを表す1つ以上の状態コードを受け取り、その受け取った状態コードに基づいて、その受け容れられた同期モードを使用して、1つ以上のデータクラスへの付加的な変化をサーバーから受け取り、サーバーから受け取った付加的な変化をクライアント装置においてコミットする、ことができるようにする、クライアント装置。 請求項47 前記プロセッサは、1つ以上のデータクラスのうちの少なくとも1つに対する提案された同期モードがサーバーにより拒絶されたことを指示する1つ以上の状態コードを受け取り、その拒絶された同期モードとは異なる同期モードを含む別の要求を送信する、ように前記同期プロトコルを動作するよう構成される、請求項46に記載のクライアント装置。 請求項48 前記プロセッサは、提案された同期モード及び1つ以上の変化を単一のメッセージにおいてサーバーへ送信するように前記同期プロトコルを動作するよう構成される、請求項46に記載のクライアント装置。 請求項49 前記プロセッサは、2つ以上のデータクラスに対する提案された同期モードをパラレルに送信するように前記同期プロトコルを動作するよう構成される、請求項46に記載のクライアント装置。 請求項50 前記プロセッサは、2つ以上のデータクラスの各々に対して異なる提案された同期モードをパラレルに送信することを含めて、2つ以上のデータクラスに対する提案された同期モードをパラレルに送信するように前記同期プロトコルを動作するよう構成される、請求項49に記載のクライアント装置。 請求項51 前記プロセッサは、1つのデータクラスに対して提案された高速同期モードをそして別のデータクラスに対して提案された低速同期モードを送信するように前記同期プロトコルを動作するよう構成される、請求項49に記載のクライアント装置。 請求項52 前記プロセッサは、同期セッションが中断された後に、受け容れられた同期プロトコルを使用して同期セッションを再開するように同期プロトコルを動作するよう構成される、請求項49に記載のクライアント装置。
类似技术:
公开号 | 公开日 | 专利标题 US9648101B2|2017-05-09|Synchronization of web service endpoints in a multi-master synchronization environment CA2900080C|2018-01-16|Systems and methods for automatic sharing, synchronizing and collaboration of information among users of a group US20170300549A1|2017-10-19|Synchronization methods and systems US10455014B2|2019-10-22|Method and apparatus for synchronizing content US9654566B2|2017-05-16|Event queuing and distribution system US8745638B1|2014-06-03|Method and system for distributing object update messages in a distributed network system US8463915B1|2013-06-11|Method for reducing DNS resolution delay US20190238478A1|2019-08-01|Using a template to update a stack of resources US8234315B2|2012-07-31|Data source abstraction system and method US20130304932A1|2013-11-14|Data communication protocol JP5792850B2|2015-10-14|ネットワーク上でのファイルフォルダ送信 DE60223453T2|2008-09-18|Verfahren und Vorrichtung zur Benutzung eines Synchronisationsschlüssels US8024290B2|2011-09-20|Data synchronization and device handling KR101109251B1|2012-01-30|웹 서비스 애플리케이션 프로토콜 및 soap 프로세싱모델 US7668902B2|2010-02-23|Application programming interface for implementing directory service access using directory service markup language US7917584B2|2011-03-29|Gesture-based collaboration KR101923245B1|2018-11-28|투명한 장애 극복 기법 US9524327B2|2016-12-20|Method and system for data synchronization, and apparatus thereof JP4344324B2|2009-10-14|コンピューティング・デバイスとのサーバ同期のための方法およびシステム EP2028599B1|2014-09-24|Synchronising data US10387451B2|2019-08-20|Synchronization system for multiple client devices KR101150146B1|2012-06-08|클라이언트가 서버와 상호작용하는 컴퓨터 구현 방법, 서버가 클라이언트와 상호작용하는 컴퓨터 구현 방법, 오브젝트를 공유하는 분산 파일 시스템 및 컴퓨터 판독가능 기록 매체 US10264067B2|2019-04-16|Content item sharing and synchronization system with team shared folders US7206842B2|2007-04-17|Method and apparatus to facilitate access and propagation of messages in communication queues using a public network KR101470991B1|2014-12-09|메타데이터를 위한 네트워크 레포지토리
同族专利:
公开号 | 公开日 AU2009221998A1|2009-09-11| JP5753597B2|2015-07-22| JP5475909B2|2014-04-16| US8046498B2|2011-10-25| CN103259864B|2016-09-07| CN103327073A|2013-09-25| CA2717535A1|2009-09-11| AU2009221998B2|2012-01-12| JP2014078284A|2014-05-01| EP2439660A2|2012-04-11| CN103327073B|2016-09-07| JP2013178819A|2013-09-09| KR20110125681A|2011-11-21| JP5753596B2|2015-07-22| KR20100123897A|2010-11-25| KR101167833B1|2012-07-27| JP5475908B2|2014-04-16| KR101343202B1|2013-12-20| CN103259864A|2013-08-21| CN102016846A|2011-04-13| CA2717535C|2014-05-06| WO2009111492A1|2009-09-11| JP2014102852A|2014-06-05| EP2098963A1|2009-09-09| KR20120030594A|2012-03-28| KR101186042B1|2012-09-27| WO2009111492A4|2009-11-05| JP5280462B2|2013-09-04| GB2471227A|2010-12-22| CN102016846B|2013-06-26| US8224918B2|2012-07-17| CA2833511C|2016-11-15| GB201016416D0|2010-11-10| US20100223400A1|2010-09-02| US20120036212A1|2012-02-09| US7747784B2|2010-06-29| JP2013211037A|2013-10-10| US20090228606A1|2009-09-10| EP2439660A3|2012-11-07| CA2833511A1|2009-09-11|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题 JP2005537538A|2002-07-19|2005-12-08|シンクロロジックインコーポレイテッド|プロファイル情報を利用するためのシステムおよび方法| JP2005537579A|2002-09-03|2005-12-08|ノキアコーポレイション|中断された同期プロセスに対処してデータを同期させる方法、装置、システム| JP2007504763A|2003-09-04|2007-03-01|ノキアコーポレイション|通信システムにおける位置プライバシー|JP2013183274A|2012-03-01|2013-09-12|Nec Corp|同期対象データ処理装置、データ同期システム、同期対象データ処理方法、および、コンピュータ・プログラム|US6173335B1|1993-07-30|2001-01-09|Apple Computer, Inc.|Structure and protocol for routing information in a system| JPH07325771A|1994-05-31|1995-12-12|Ricoh Co Ltd|ファイル転送装置| US5684984A|1994-09-29|1997-11-04|Apple Computer, Inc.|Synchronization and replication of object databases| US5706509A|1995-04-28|1998-01-06|Intel Corporation|Application independent record level synchronization| US5728335A|1996-06-26|1998-03-17|Union Carbide Chemicals & Plastics Technology Corporation|Process for extrusion| US5884325A|1996-10-09|1999-03-16|Oracle Corporation|System for synchronizing shared data between computers| US6182141B1|1996-12-20|2001-01-30|Intel Corporation|Transparent proxy server| US6253228B1|1997-03-31|2001-06-26|Apple Computer, Inc.|Method and apparatus for updating and synchronizing information between a client and a server| US5987376A|1997-07-16|1999-11-16|Microsoft Corporation|System and method for the distribution and synchronization of data and state information between clients in a distributed processing system| US6341291B1|1998-09-28|2002-01-22|Bentley Systems, Inc.|System for collaborative engineering using component and file-oriented tools| US6477543B1|1998-10-23|2002-11-05|International Business Machines Corporation|Method, apparatus and program storage device for a client and adaptive synchronization and transformation server| US6247135B1|1999-03-03|2001-06-12|Starfish Software, Inc.|Synchronization process negotiation for computing devices| US6430576B1|1999-05-10|2002-08-06|Patrick Gates|Distributing and synchronizing objects| US6823456B1|1999-08-25|2004-11-23|International Business Machines Corporation|System and method for providing trusted services via trusted server agents| US6694336B1|2000-01-25|2004-02-17|Fusionone, Inc.|Data transfer and synchronization system| EP1187421A3|2000-08-17|2004-04-14|FusionOne, Inc.|Base rolling engine for data transfer and synchronization system| US8156074B1|2000-01-26|2012-04-10|Synchronoss Technologies, Inc.|Data transfer and synchronization system| US20050055382A1|2000-06-28|2005-03-10|Lounas Ferrat|Universal synchronization| US20020026474A1|2000-08-28|2002-02-28|Wang Lawrence C.|Thin client for wireless device using java interface| US7177866B2|2001-03-16|2007-02-13|Gravic, Inc.|Asynchronous coordinated commit replication and dual write with replication transmission and locking of target database on updates only| WO2002075539A2|2001-03-16|2002-09-26|Novell, Inc.|Client-server model for synchronization of files| US6829655B1|2001-03-28|2004-12-07|Siebel Systems, Inc.|Method and system for server synchronization with a computing device via a companion device| US6970876B2|2001-05-08|2005-11-29|Solid Information Technology|Method and arrangement for the management of database schemas| US7149813B2|2001-08-14|2006-12-12|Microsoft Corporation|Method and system for synchronizing mobile devices| US7761535B2|2001-09-28|2010-07-20|Siebel Systems, Inc.|Method and system for server synchronization with a computing device| US6983293B2|2002-07-24|2006-01-03|International Business Machines Corporation|Mid-tier-based conflict resolution method and system usable for message synchronization and replication| US7359991B2|2002-11-05|2008-04-15|Microsoft Corporation|Folder synchronization| US20060259524A1|2003-03-17|2006-11-16|Horton D T|Systems and methods for document project management, conversion, and filing| KR100491541B1|2003-08-01|2005-05-25|니트젠테크놀러지스 주식회사|네트웍 환경에서의 컨텐츠 동기화 시스템 및 동기화 방법| US20050033811A1|2003-08-07|2005-02-10|International Business Machines Corporation|Collaborative email| US7080104B2|2003-11-07|2006-07-18|Plaxo, Inc.|Synchronization and merge engines| US7676562B2|2004-01-20|2010-03-09|Microsoft Corporation|Computer system for accessing instrumentation information| KR100547896B1|2004-03-05|2006-01-31|삼성전자주식회사|데이터 동기화 시스템 및 서버와 클라이언트의 데이터동기화 방법| EP1754186A1|2004-05-24|2007-02-21|Apple Computer, Inc.|Methods for sharing groups of objects, synchronising, and synchronising between three or more devices| WO2006031921A2|2004-09-15|2006-03-23|Adesso Systems, Inc.|System and method for managing data in a distributed computer system| CN1753359B|2004-09-24|2011-01-19|华为技术有限公司|实现传输SyncML同步数据的方法| US8069226B2|2004-09-30|2011-11-29|Citrix Systems, Inc.|System and method for data synchronization over a network using a presentation level protocol| US20060074996A1|2004-10-05|2006-04-06|International Business Machines Corporation|System and method for synchronizing data| JP4568576B2|2004-10-26|2010-10-27|株式会社デンソーアイティーラボラトリ|データ共有システム及び通信端末並びにデータ共有方法| US8230326B2|2004-12-17|2012-07-24|International Business Machines Corporation|Method for associating annotations with document families| US7908247B2|2004-12-21|2011-03-15|Nextpage, Inc.|Storage-and transport-independent collaborative document-management system| CN100531265C|2004-12-21|2009-08-19|华为技术有限公司|一种在被叫用户终端上显示主叫信息的方法| US9020887B2|2004-12-21|2015-04-28|Proofpoint, Inc.|Managing the status of documents in a distributed storage system| NO20052719D0|2005-06-06|2005-06-06|Ericsson Telefon Ab L M|Synkronisering av informasjonsenheter med tilhorende referanser| US7600030B2|2005-08-31|2009-10-06|Microsoft Corporation|Compounding of HTTP authoring protocol| CN101005428A|2006-01-19|2007-07-25|华为技术有限公司|一种检测与解决数据同步冲突的实现方法| CN101047707A|2006-03-30|2007-10-03|华为技术有限公司|发起设备能力信息协商的方法及系统| US7756829B2|2006-04-18|2010-07-13|Sandeep Bhanote|Method and apparatus for mobile data collection and management| US8108388B2|2006-04-26|2012-01-31|Microsoft Corporation|Significant change search alerts| US20080155112A1|2006-12-22|2008-06-26|Nokia Corporation|System and method for updating information feeds| US7747784B2|2008-03-04|2010-06-29|Apple Inc.|Data synchronization protocol|US7437484B2|2003-12-29|2008-10-14|International Business Machines Corporation|Method for optimizing synchronization| US8495244B2|2005-06-29|2013-07-23|Jumpstart Wireless Corporation|System and method for dynamic automatic communication path selection, distributed device synchronization and task delegation| CN101494534A|2008-01-21|2009-07-29|华为技术有限公司|一种数据同步方法、装置及系统| WO2009099206A1|2008-02-06|2009-08-13|Ihi Corporation|高温放熱物体貯蔵ヤード発電装置| KR101490266B1|2008-02-22|2015-02-05|엘지전자 주식회사|통합 ip 메시징 서비스의 메시지를 저장 및 검색하는 단말 및 방법| US7747784B2|2008-03-04|2010-06-29|Apple Inc.|Data synchronization protocol| US8621108B2|2008-05-08|2013-12-31|Dialogic Corporation|System and method for monitoring user interface connectivity state| US8112537B2|2008-09-29|2012-02-07|Apple Inc.|Trickle sync protocol| US8073887B2|2008-10-09|2011-12-06|International Business Machines Corporation|Representational state transferservice import editor| KR20100050072A|2008-11-05|2010-05-13|삼성전자주식회사|데이터 압축 방법 및 이를 이용한 데이터 통신 시스템| US9002787B2|2009-01-30|2015-04-07|Blackberry Limited|Method and apparatus for tracking device management data changes| EP2227047A1|2009-03-05|2010-09-08|BRITISH TELECOMMUNICATIONS public limited company|Device determination| US8161195B2|2009-03-25|2012-04-17|Microsoft Corporation|Adaptable management in sync engines| US20100268784A1|2009-04-17|2010-10-21|Marc Henness|Data synchronization system and method| US8417765B2|2009-06-09|2013-04-09|International Business Machines Corporation|Method and apparatus to enable protocol verification| JP5585062B2|2009-12-04|2014-09-10|ソニー株式会社|情報処理装置、情報処理方法、データ管理サーバおよびデータ同期システム| US20110196973A1|2010-02-05|2011-08-11|Interdigital Patent Holdings, Inc.|Method and apparatus for inter-device session continuityof multi media streams| US9467338B2|2010-04-01|2016-10-11|Blackberry Limited|Method for communicating device management data changes| US20120023065A1|2010-07-20|2012-01-26|Deweese William|System and method for managing data on an occasionally connected mobile device| CN101923571B|2010-07-29|2013-05-01|中兴通讯股份有限公司|管理终端数据记录的方法及装置| US8438246B2|2010-09-15|2013-05-07|Sony Mobile Communications Ab|Device management using a RESTful interface| WO2012044356A2|2010-10-01|2012-04-05|Interdigital Patent Holdings, Inc.|Method and apparatus for media session sharing and group synchronization of multi media streams| US8799378B2|2010-12-17|2014-08-05|Microsoft Corporation|Non-greedy consumption by execution blocks in dataflow networks| US8443082B2|2011-02-28|2013-05-14|Interactive Social Internetworks, Llc|Network communication systems and methods| US8850516B1|2011-06-22|2014-09-30|Emc Corporation|Virtual private cloud that provides enterprise grade functionality and compliance| US9213718B1|2011-06-22|2015-12-15|Emc Corporation|Synchronized file management across multiple disparate endpoints| US8930529B1|2011-09-27|2015-01-06|Palo Alto Networks, Inc.|Policy enforcement with dynamic address object| US9537891B1|2011-09-27|2017-01-03|Palo Alto Networks, Inc.|Policy enforcement based on dynamically attribute-based matched network objects| US20130097116A1|2011-10-17|2013-04-18|Research In Motion Limited|Synchronization method and associated apparatus| US10452084B2|2012-03-14|2019-10-22|Ademco Inc.|Operation of building control via remote device| US10210480B2|2012-05-31|2019-02-19|Apple Inc.|Avoiding a redundant display of a notification on multiple user devices| US20140006169A1|2012-05-31|2014-01-02|AppNexus Inc.|Application marketplace for online advertising applications| US9047109B1|2012-06-20|2015-06-02|Palo Alto Networks, Inc.|Policy enforcement in virtualized environment| US20140089619A1|2012-09-27|2014-03-27|Infinera Corporation|Object replication framework for a distributed computing environment| CN102932439A|2012-10-26|2013-02-13|华为终端有限公司|一种内容同步的方法和装置| US9268833B2|2012-12-05|2016-02-23|Microsoft Technology Licensing, Llc|Recurring calendar item master and instance synchronization| CN103916409B|2012-12-30|2017-11-21|中国移动通信集团公司|一种数据同步的方法、终端与系统| US9712508B2|2013-03-13|2017-07-18|Intel Corporation|One-touch device personalization| BR102013017941A2|2013-07-12|2015-07-21|Samsung Eletrônica Da Amazônia Ltda|Sistema e método para acionar e controlar a execução de políticas de gerenciamento| US9426140B2|2013-09-09|2016-08-23|Layer, Inc.|Federated authentication of client computers in networked data communications services callable by applications| US10303658B2|2013-11-25|2019-05-28|Dropbox, Inc.|Generating and sharing metadata for indexing synchronized content items| US10275765B2|2013-12-11|2019-04-30|Ebay Inc.|Omni-channel state preservation| US10795910B2|2013-12-31|2020-10-06|Sybase, Inc.|Robust communication system for guaranteed message sequencing with the detection of duplicate senders| EP3070619A1|2015-03-16|2016-09-21|Canon Kabushiki Kaisha|Information processing apparatuses performing synchronization of data and data synchronization methods| JP6611594B2|2015-03-16|2019-11-27|キヤノン株式会社|データの同期を行う情報処理装置、データ同期方法およびプログラム| CN105025568A|2015-06-16|2015-11-04|山东大学(威海)|一种基于频偏竞标及动态拓扑的大规模无线传感器网络同步器| US10425477B2|2015-09-15|2019-09-24|Microsoft Technology Licensing, Llc|Synchronizing file data between computer systems| US10417254B2|2016-02-01|2019-09-17|Vmware, Inc.|Intelligent content synchronization between content libraries| CN106131085B|2016-08-31|2019-09-17|江苏蓝创智能科技股份有限公司|远程智控系统的通信方法| CN106547485B|2016-10-20|2020-09-08|Oppo广东移动通信有限公司|数据迁移方法及装置| CN111295597A|2017-08-31|2020-06-16|阿维瓦软件有限公司|对象索引的数据数组|
法律状态:
2012-09-07| A977| Report on retrieval|Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20120907 | 2012-09-14| A131| Notification of reasons for refusal|Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20120913 | 2013-04-18| TRDD| Decision of grant or rejection written| 2013-04-25| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20130424 | 2013-05-30| A61| First payment of annual fees (during grant procedure)|Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130522 | 2013-05-31| R150| Certificate of patent or registration of utility model|Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 5280462 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 | 2016-05-10| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2017-05-09| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2018-05-08| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2019-05-14| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2020-04-30| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2021-04-30| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
优先权:
[返回顶部]
申请号 | 申请日 | 专利标题 相关专利
Sulfonates, polymers, resist compositions and patterning process
Washing machine
Washing machine
Device for fixture finishing and tension adjusting of membrane
Structure for Equipping Band in a Plane Cathode Ray Tube
Process for preparation of 7 alpha-carboxyl 9, 11-epoxy steroids and intermediates useful therein an
国家/地区
|